在 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,@into3
而 x
应该有 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
,因为您实际上没有可变数量的输入。
我正在尝试在八度音程中使用 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打成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
,因为您实际上没有可变数量的输入。