温度を変換する非常に単純なGUIをMATLABで作成しました。これは、学生のクラスのチュートリアルとして機能することを目的としています。しかし、奇妙なことが起こりました。他のMVCデザインパターンと同様に、モデルオブジェクト、ビューオブジェクト、およびコントローラー関数があります。GUIの出力フィールド(変換された温度)を設定するために、コントローラー関数自体でこの行を実行できます。
set(views.outputTextField,'string',num2str(round(model.outTemp)));
ここviews.outputTextField
で、は変換された温度を表示するGUIテキストフィールドであり、model.outTemp
は変換された温度です。かなり簡単です。ビューオブジェクトにはすべてのGUIuicontrolへの参照があり、これにより、モデルオブジェクトで新しく変換された温度でフィールドが更新されます。
ただし、ビューオブジェクトにビュー関数を入れたいので、次のような行を作成しようとしました。
views.updateOutputField = @()set(views.outputTextField,'string',...
num2str(round(model.outTemp)));
以前と同じ行ですが、ビューオブジェクトの無名関数になっています。このようにして、コントローラーから関数を単純に呼び出し、views.updateOutputField();
ビューロジックをコントローラーロジックから除外することができます。しかし、この方法は機能しません!(関数で動作しget()
ます。)
代わりに、次のことを行う必要があります。
views.updateOutputField = @updateOutputField
function updateOutputField()
set(views.outputTextField,'string',num2str(round(model.outTemp)));
end
匿名関数を使用するだけでなく、関数を(冗長に)分離することで、再び機能します。何!?これは私には意味がありません。ビューオブジェクトとモデルオブジェクトはグローバルであり、無名関数はで機能しget()
ます。誰かがここで何が起こっているのか手がかりを持っていますか?