2012-11-30 4 views
0

J'ai créé un gui MATLAB pour exécuter une certaine simulation.Comment stocker les résultats d'une fonction de rappel?

Dans ce gui est un bouton pour lancer la simulation. Cette fonction de rappel de bouton va ensuite exécuter les calculs. Cela entraînera bien sûr un jeu de données avec les résultats.

De plus, dans l'interface est une zone de traçage, et une zone de sélection pour basculer entre différents graphes, afin de montrer différents aspects des résultats de la simulation. Par conséquent, les résultats doivent également être disponibles pour d'autres fonctions dans l'interface graphique. Ceci est un problème, car la fonction de rappel n'a pas de sortie

Deux solutions auxquelles je peux penser sont le stockage de l'ensemble de données dans un fichier MAT ou l'utilisation de variables globales. La première solution ne me semble pas vraiment correcte, et de plus j'ai appris que les variabeles globaux doivent être évités si possible. Alors, quelle est la meilleure solution ici?

Répondre

0

MATLAB offre certaines fonctions pour cela. Il y a la fonction guidata, qui peut stocker une variable. Cela peut par exemple être utilisé pour faire circuler vos poignées gui. De plus, il y a les fonctions setappdata et getappdata. Ces fonctions permettent de transférer des données entre des fonctions et de coupler des variables à une poignée de chiffres.

Plus d'informations sur les différentes méthodes peuvent être lues here.

Ceci est censé être sémantiquement plus correct, puis en utilisant des variables globales. Cependant, je suis toujours curieux de savoir pourquoi. Des commentaires?

1

vous pouvez créer un utilisateur classe définie héritant de la classe de poignée qui définit vos callbacks, vos callbacks exécutent ensuite de « l'intérieur » l'instance de classe poignée

classdef mySimulation < handle 
    properties 
     hFigure 
     mySimResults 
    end 
    methods 
     function this = mySimulation(varargin) 
      hFigure = figure; 
      ... 
      <build figure components> 
      ... 
     end 
     function myButtonCallback(this, src, evnt) 
      this.mySimResults = runMySimulation; 
      ... 
      <update plot etc> 
     end 
     function mySelectBoxCallback(this, src, evnt) 
      ... 
      <update plots> 
     end 
    end 
end 
+0

Oui, je vous remercie de votre réponse. Vous pouvez également utiliser des sous-fonctions pour cela. – mmumboss

+0

Si par sous-fonctions vous entendez l'utilisation de diverses déclarations de fonctions dans un fichier .m script, je pense que vous risquez de perdre la portée de la fonction de rappel et de stocker les données telles que l'approche .mat ou les interfaces graphiques. appdata comme mentionné dans une autre réponse ... Je trouve ces méthodes un peu maladroites :) – janh