私がやりたいことは次のとおりです。
a = 5
foo = @(x) x+a
a = 3
foo(1) % recieve 4
代わりに、6つしか得られません!私が実行した他のいくつかのテストでは、 is が呼び出されたときではなく、a
is が評価されたことがわかりました。foo
foo
いろいろな理由で一緒に仕事ができない
foo = @(x,a) x+a
私がやりたいことは次のとおりです。
a = 5
foo = @(x) x+a
a = 3
foo(1) % recieve 4
代わりに、6つしか得られません!私が実行した他のいくつかのテストでは、 is が呼び出されたときではなく、a
is が評価されたことがわかりました。foo
foo
いろいろな理由で一緒に仕事ができない
foo = @(x,a) x+a
あなたが求めていることはお勧めできません。デバッグが困難になります。
とはいえ、関数を使用しevalin
て手を伸ばして の現在の値を取得することもできますa
。
a=5;
foo = @(x)evalin('caller','a')+x;
foo(1) %Returns 6
a=3;
foo(1) %Returns 5
より良い (はるかに良い!) の定義をa
適切なデータ構造またはオブジェクトにプッシュし、関数を作成することgetCurrentValueOfA()
です。foo
次に、次のように定義できます
foo = @(x) getCurrentValueOfA() + x;