在 Octave 中使用 varargin

Use of varargin in octave

我正在尝试在八度音程中使用 varargin,但似乎遇到了一些问题。这是我的代码:

into2.m

function  [result] = into2(x)
    result = x*2;
endfunction

into3.m

function  [result] = into3(x)
    result = x*3;
endfunction

calc.m

function  [result1] = calc(varargin, x)
    fn1 = varargin{1};
    fn2 = varargin{2};
    result1 = fn1(x) + fn2(x);
endfunction

test1.m(主要功能)

function  [] = test1()
    result= calc(@into2,@into3,2);
    disp(result);
endfunction

test1() 是调用 calc() 并传递两个函数句柄和一个标量的主函数。我希望 varargin 应该有 @into2,@into3x 应该有 2。但是,varargin@into2 而 x 有 @into3。我尝试更改顺序,但传递的两个函数不会进入一个参数;每个参数只有一个功能。我相信 varargin 应该有一个单元格,但似乎不起作用。我正在使用 Octave 4.2。 (把MATLAB打成tag,因为两者应该差不多。)

问题是 varargin 必须 作为函数的 last 输入参数出现。如果它不是最后一个,那么它只是被当作一个输入参数 named varargin 来代替。来自 documentation:

If the special parameter name varargin appears at the end of a function parameter list it indicates that the function takes a variable number of input arguments

所以实际上,您的 calc 函数在功能上与:

没有区别
function result = calc(y, x)

您要做的是将 varargin 放在输入参数列表的最后并修改 calc.

中的逻辑
function result = calc(x, varargin)
    fn1 = varargin{1};
    fn2 = varargin{2};

    result = fn1(x) + fn2(x);
end

附带说明一下,目前尚不清楚为什么您需要在这种情况下使用 varargin,因为您实际上没有可变数量的输入。