我需要声明一个有32个参数的函数,所以放一个唯一的参数会很方便:一个包含32个元素的数组。 我没有找到这样做的语法,我已经尝试过如下: function x = myfunction(str(32))(etc ...) 但没有成功。
答案 0 :(得分:5)
与其他语言不同,MATLAB可以接受矩阵作为单个参数;所以你可以检查输入参数是一个长度为32的向量:
function x = myfunction(arg)
if length(arg) ~= 32
error('Must supply 32 arguments!');
end
%# your code here
end
如果是可变数量的参数,请查看varargin
:
function x = myfunction(varargin)
但对于32个参数,请考虑使用an input structure:
function x = myfunction(argStruct)
if length(fieldnames(argStruct)) ~= 32
error('not enough arguments!');
end
在结构中提供参数,然后传递结构:
>> myArgs = struct();
>> myArgs.arg1 = 5;
>> myArgs.arg2 = 7;
>> %#(etc)
>> x = myfunction(myArgs);
然后在函数中,您可以直接调用argStruct.arg1
等;或者将其解压缩到函数内的32个不同变量中。我会给字段描述性名称,所以你不要在函数内部将它们称为arg1
等。对于那么多输入参数,使用该函数的人可能不会记住函数要求它们传递输入的顺序。使用结构允许用户传入参数,而无需考虑这些输入的定义顺序。
答案 1 :(得分:3)
要添加@trustrude27的精彩答案,看起来你可能会误解函数声明在Matlab中是如何工作的。你写道:
function x=myfunction(str(32))
但是,您不需要在matlab中声明输入类型。只要给它一个名字,然后使用它。因此,声明的正确语法是:
function x = myfunction(myInput)