2017-09-04 39 views
1

我想修改函数rand和定义自己的功能传递varargin到子功能,如果串

function num = rand(varargin) 

大多数时候,我只是包装调用

num = builtin("rand", [varargin{:}]); 

,这工作得很好,除了在情况下有一个字符串参数。

对于rand(2,3,"double")我获得

warning: implicit conversion from numeric to char 
warning: called from rand at line 83 column 11 
error: rand: unrecognized string argument 
error: called from rand at line 83 column 11 

rand("seed",2)相同。

另一方面,rand("seed")似乎工作正常。

任何人都可以提供解释和解决方案吗?

+2

'num = builtin('rand',varargin {:});'应该有效。 – rahnema1

回答

1

语法:

num = builtin('rand', [varargin{:}]); 

会为你在输入参数可表示为的情况下才起作用无论是comma-separated list或载体,当你指定rand大小如:

num = rand(2, 3, 4); 
% Or ... 
num = rand([2 3 4]); 

会为输入不的工作,必须单独输入,就像这样:

num = rand(2, 3, 'double'); % Works 
num = rand([2 3 'double']); % Throws an error 

在一般情况下,你应该只通过的varargin内容作为一个逗号分隔的列表(不collecting the contents into a vector/matrix)因为builtin被设计为处理就好了:

num = builtin('rand', varargin{:}); 

另外,还要留意之间的差异“字符串”如'rand'(a character array)和"rand"(a string)。在某些情况下,他们可能有不同的行为。