0

以前に定義された定数によって、Octave/Matlab の関数への既定の引数を定義する際に問題があります。誰かが私にヒントを与えることができますtest1(1)か? どうもありがとう!1100test2(1)error:

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 に答える