1

次のように、GUI の Callback 内にいくつかの関数 (別のファイルで定義) があります。

function myFunction_Callback(hObject, eventdata, handles)
[output] = function1(input);
[output] = function2(input);
[output] = function3(input);
guidata(hObject, handles);

ここで、function1 を定義していて、ローカル変数をハンドルに格納したいとします。私がそうするとき:

[output] = function1(input)
localVariable = [1 2 3];
handles.myVariable = localVariable;

handles.myVariablefunction1 が完了すると、ハンドルから「消えます」。ハンドルに「とどまる」方法は? それを出力として定義し、後でそのようなハンドルに格納する必要がありますか?

[output, localVariable] = function1(input)
...
localVariable = [1 2 3];

以降

function myFunction_Callback(hObject, eventdata, handles)
[output, handles.myVariable] = function1(input);
[output] = function2(input);
[output] = function3(input);
guidata(hObject, handles);

?? この質問は非常にばかげているように聞こえ、不明確かもしれませんが、許してください、私はGUIとハンドルの初心者に非常に混乱しています:)ありがとう!

4

2 に答える 2

1

はい、いくつかの点がありますが、一般的なアプローチは問題ありません。

  • handles通常、オブジェクトへのハンドルを含むデータ構造を参照します。これに他のタイプのデータを追加することは有効ですが、混乱を招くだけなのでお勧めできません。

  • 関数の単一の出力を囲む括弧は必要ありません。確かに、それは好みとコーディング スタイルの問題ですが、私はお勧めしません。かっこは、一緒に属するものをグループ化する場合にのみ使用してください。

  • どこかにinput含まれていますか?handles同様に、関数outputs には の修正版が含まれていhandlesますか? 関数が を変更しない場合handles、コールバックが呼び出されるたびに再保存する必要はもちろんありません...

要約すると、次のようにします。

function myFunction_Callback(hObject, eventdata, handles)
    ...
    output = func1(input);  
    output = func2(output);  
    output = func3(output);
    ...
    guidata(hObject, output);  % <-- NOTE: output contains handles


function output = func1(input)
    ...
    output.handles = input.handles;
    ...
    output.localVar = [1 2 3];
    ...
于 2012-11-05T06:50:11.057 に答える
1

このような関数にデータを渡すのは非常に面倒です。

これらの原因に対して、オブジェクト指向プログラミングを適用することが非常に役立つことがわかりました。特にクラスを として定義しますclassdef myclass < handles。これらを使用すると、関係のない図の間でデータを転送するなど、あらゆる種類のクールなことを簡単に行うことができます。

グローバルの代わりにシングルトン パターンを実装すると便利です。また、ここでオブザーバー パターンを示す回答も提供しました。

于 2012-11-05T11:02:08.640 に答える