2017-03-14 20 views
2

他の言語に関する多くの関連する質問がありますが、これはMATLABに関するものです。MATLABの匿名関数から現在のスコープにアクセス

(匿名機能から発信者の有効範囲にアクセスするにはどうすればよいですか)私はevalの使用を検討していましたが、これは単に変数を使うよりも悪いことです。例:

clearvars; 
f1 = @() n 
f2 = @() eval('n') 
n = 1 
f3 = @() n 
f4 = @() eval('n') 
n = 2 

f3()実行されますが、出力1、私は2をしたいと思いながら。私の好適な解決策はf2()だろうが、すべてのf1()は、f2()は、f4()はほぼ同じエラーメッセージで失敗:

(Error using eval) 
Undefined function or variable 'n'. 

興味深いことに、f4()も、元のスコープにアクセスすることはできません、おそらくevalはようnの使用を隠すため、 nはメモリの理由からf4の横には格納されません。

nからf2にアクセスするにはどうすればよいですか?

+0

使用しているMATLABのバージョンは?少なくともMATLAB R2014bでは、 'f3()'が動作します。 – hbaderts

+0

@hbaderts 2016b。もちろん、 'f3()'は動作しますが、 'f3'を定義した後で' n'の値を変更することはできません(少なくとも 'f3'には影響しません)。私は質問を明確にします(しかし、私はすでに答えがあることに注意してください)。 – bers

+0

匿名関数は、通常の関数と同じです。誰も 'function bla = foo()'があなたのワークスペースからnを得ることを期待していません。なぜ匿名関数から期待していますか?ブツが作成されると、それはにハードその値を取得します。 –

答えて

2

これは動作します:

clearvars; 
f5 = @() evalin('caller', 'n') 
n = 2 
f5() 

the MATLAB documentationevalinコマンドの詳細についてはこちらをご覧ください。

関連する問題