如何用一个数组的参数声明一个函数?

时间:2011-10-07 19:28:24

标签: matlab

我需要声明一个有32个参数的函数,所以放一个唯一的参数会很方便:一个包含32个元素的数组。 我没有找到这样做的语法,我已经尝试过如下: function x = myfunction(str(32))(etc ...) 但没有成功。

2 个答案:

答案 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)