0

我在通过先前定义的常量为 Octave/Matlab 中的函数定义默认参数时遇到问题。有人可以给我一个提示,为什么在下面的代码中test1(1)显示1and 100,而test2(1)error:testarg' undefined near line 1 column 36` 失败?太感谢了!

testarg = 100

function test1 (arg1=testarg, arg2=100)
 disp(arg1)
 disp(arg2)
endfunction

function test2 (arg1=testarg, arg2=testarg)
 disp(arg1)
 disp(arg2)
endfunction

test1(1)
test2(2)

编辑:

请注意,论点的顺序很重要:

function test3 (arg1=100, arg2=testarg)
 disp(arg1)
 disp(arg2)
endfunction

 octave:8> test1(1)
 1
 100
 octave:9>test3(1)
 error: `testarg' undefined near line 1 column 32
4

2 回答 2

0

我从未在 Matlab 中见过这种语法,它是 Octave 的吗?一般来说,默认参数需要是一个常量,而不是其他一些可能在范围内或不在范围内或在调用函数时初始化的变量(当然,如果不是这种情况,请随时教育我) .

在常规 Matlab 中执行默认参数的“正常”方式是这样的:

function test1(arg1, arg2)
    if nargin < 2
        arg2 = 100;
    end
    if nargin < 1
        arg2 = testarg;     % if testarg isn't in scope this still won't work
    end
    disp(arg1);
    disp(arg2);
end
于 2014-01-05T13:23:43.317 回答
0

这在我看来像是一个错误,您应该向 Octave 开发人员报告。

同时,这里有一个解决方法:

testarg = 100

function test1 (arg1, arg2)
 if nargin < 2, arg2 = 100; end
 if nargin < 1, arg1 = testarg; end

 disp(arg1)
 disp(arg2)
endfunction

test1(2)

也就是说,最好在这里明确,并将它们定义为“全局变量”。如果testarg打算作为常量,最好将其设为返回所述值的函数:

testarg = @() 100;
于 2014-01-05T13:23:44.180 回答