【问题标题】:passing varargin to subfunction if string如果是字符串,则将 varargin 传递给子函数
【发布时间】:2018-02-12 19:50:21
【问题描述】:

我想修改函数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") 似乎工作正常。

谁能提供解释和解决方案?

【问题讨论】:

  • num = builtin('rand', varargin{:}); 应该可以工作。

标签: matlab function arguments variadic-functions


【解决方案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'(character array)和 "rand"(string)。在某些情况下,它们可能有不同的行为。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-01-28
    • 2013-12-11
    • 1970-01-01
    • 2011-05-12
    • 2016-12-08
    相关资源
    最近更新 更多