Après this exemple de Model View GUI Controller dans Matlab, j'ai une question concernant les arguments d'entrée de rappel de fonction anonymeMatlab anonymes arguments de la fonction de rappel
Voici la fonction de vue qui crée les poignées graphiques et les transmet comme un argument d'entrée à la fonction de rappel onChanged.
function handles = View_TimeDomain(m)
%VIEW a GUI representation of the signal model
% build the GUI
handles = initGUI();
onChangedF(handles, m); % populate with initial values
% observe on model changes and update view accordingly
% (tie listener to model object lifecycle)
addlistener(m, 'f', 'PostSet', ...
@(o,e) onChangedF(handles,e.AffectedObject));
end
La première chose que je ne comprends pas tout à fait est que, selon la documentation Matlab le premier argument doit être la source de l'événement et le second arument doit être les données d'événement (Matlab doc1, Matlab doc2), mais en ce cas est handles
. Lorsque l'événement est déclenché, la fonction onChangedF suivante est appelée comme prévu. Cependant, dans ce cas, handles est la structure contenant les handles définis en utilisant initGui() et non la source d'événement.
Je suppose que cela découle de la définition de la fonction anonyme:
@(o,e) onChangedF(handles, e.AffectedObject)
Ai-je raison, en supposant que o
est la source qui ne sert pas à l'entrée de la fonction onChangedF
. Quelqu'un peut-il expliquer pourquoi cette syntaxe d'une fonction anonyme est valide? Je pensais que o
doit aussi être un argument de cette fonction de rappel spécifique. Quelque chose comme ceci:
@(o,e) onChangedF(o, handles, e.AffectedObject)
où des arguments supplémentaires sont ajoutés (à la fin) de la fonction. Et puis juste éviter cet argument utilisé en utilisant ~:
function onChangedF(~, handles, model)
% respond to model changes by updating view
if ~ishghandle(handles.fig), return, end
set(handles.line, 'XData',model.t, 'YData',model.data)
set(handles.slider, 'Value',model.f);
end
Vous n'avez pas besoin mis 'O' comme argument de onChangedF parce que, cette la fonction n'est pas votre callback.La fonction de calback est la fonction anonyme, et elle appelle votre fonction avec les paramètres que vous voulez. Par exemple vous pouvez avoir une fonction anonyme qui est '@ (o, e) data = sqrt (5)', je ne sais pas si vous voyez mon point mais la chose est que dans votre callback (anonyme ou non) vous pouvez appelez n'importe quelle fonction avec n'importe quel paramètre car la fonction que vous appelez n'est pas la fonction de rappel, donc ils n'ont pas besoin de lien de paramètres vers l'évènement de rappel. –
Merci pour votre aide. Donc '@ (o, e)' est une sorte d'espace réservé pour les données source et evend, qui doivent être fournies selon la documentation matlab? – evolved