传递varargin到子功能,如果串
问题描述:
我想修改函数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")
似乎工作正常。
任何人都可以提供解释和解决方案吗?
答
语法:
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)。在某些情况下,他们可能有不同的行为。
'num = builtin('rand',varargin {:});'应该有效。 – rahnema1