我试图在八度音阶中使用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,@into3
而x
应该有2
。但是,varargin
有@into2
,x有@into3
。我尝试改变顺序,但传递的两个函数不会进入一个参数;每个参数只有一个函数。我相信varargin
应该有一个单元格,但似乎不起作用。我使用的是Octave 4.2。 (将MATLAB放入标签中,因为两者应该相似。)
答案 0 :(得分:3)
问题是varargin
必须显示为函数的 last 输入参数。如果它不是最后一个,那么它将被简单地视为输入参数,名为 varargin
。来自documentation:
如果特殊参数名称
varargin
在函数参数列表的末尾出现,则表示该函数采用可变数量的输入参数
因此,实际上,您的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
,因为你实际上并没有可变数量的输入。