MATLABのオブジェクト指向の性質により、別の可能性があります。独自のハンドルクラスを定義し、初期化フェーズで追加の引数として各コールバックに渡すことができます。
classdef Data<handle
properties (Access=public)
Val;
end
end
function SimpleGui
data = Data();
hLoad = uicontrol('Style', 'push', 'String', 'Push me', ...
'Callback', {@callback data});
data.Val = 5;
end
function callback(hSource, event, data)
data.Val = data.Val+1;
disp(data.Val);
end
さらに別のオプション:
また、guidata
/ appdata
(@Chrisによって説明されている)に関しては、次のように改善できます。
常に取得および設定するカプセル化コールバックを作成しますguidata
。
function CallbackWrapper(hObj,evt,func)
data = guidata(hObj);
data = func(hObj,evt,data);
guidata(hObj,data);
end
これで、コールバックは次のように定義する必要があります(異なる署名に注意してください)。
function SimpleGui
hSave = uicontrol('Style', 'push', 'String', 'Push me', ...
'Callback', {@CallbackWrapper @myCallBack});
data.x = 1;
guidata(hSave,data);
end
function data = myCallBack(hObj,evt,data)
data.x = data.x + 1;
disp(data.x);
end