5

matlabには2つの関数があり、大まかに次のようになります。

function f1()
  setup_callback(@f2);
  a = 1;
  evaluate_callback();
end

function f2()
  ...
end

ここで、evaluate_callbackは、f2を呼び出す外部ライブラリ関数です。

f2の内側からaの現在の値を読み取れるようにしたい。グローバルを使用せずにこれを達成する方法はありますか?

4

2 に答える 2

10

内部f2に入れ子関数を作成しますf1

function f1()
    setup_callback(@f2);
    a = 1;
    evaluate_callback();

    function f2()
      %# you can access a here
      disp(a)
    end
end
于 2012-06-06T16:55:08.590 に答える
3

入れ子関数は、必要なスコープを提供します。f1の内部から、または関数ハンドルを介する以外に、f2コールバック関数を呼び出す方法はないことに注意してください。したがって、f1は@f2ハンドルを返すことができ、グローバルスコープの他の関数はそれをそのように呼び出すことができます。

function f1()
  setup_callback(@f2);
  a = 1;
  evaluate_callback();

  function f2()
    % refer to a
    ...
  end
end
于 2012-06-06T16:53:54.137 に答える