如果字符串将varargin传递给子函数

时间:2017-09-04 14:36:52

标签: matlab function arguments variadic-functions

我想修改函数rand并定义我自己的函数

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")似乎工作正常。

有人可以提供解释和解决方案吗?

1 个答案:

答案 0 :(得分: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)。在某些情况下,他们可能会有不同的行为。