私がやりたいことは次のとおりです。
a = 5
foo = @(x) x+a
a = 3
foo(1) % recieve 4
代わりに、6つしか得られません!私が実行した他のいくつかのテストでは、 is が呼び出されたときではなく、ais が評価されたことがわかりました。foofoo
いろいろな理由で一緒に仕事ができない
foo = @(x,a) x+a
私がやりたいことは次のとおりです。
a = 5
foo = @(x) x+a
a = 3
foo(1) % recieve 4
代わりに、6つしか得られません!私が実行した他のいくつかのテストでは、 is が呼び出されたときではなく、ais が評価されたことがわかりました。foofoo
いろいろな理由で一緒に仕事ができない
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;