Déclaration d'une variable globale dans MATLAB
Existe-t-il un moyen de déclarer des variables globales dans MATLAB?
Veuillez ne pas répondre avec:
global x y z;
Parce que je peux aussi lire les fichiers d'aide .
J'ai déclaré une variable globale, x
, puis faire quelque chose comme ceci:
function[x] = test()
global x;
test1();
end
Où la fonction test1()
est définie comme:
function test1()
x = 5;
end
Quand j'exécute test()
, mA sortie est x = []
. Y a-t-il un moyen de le faire sortir le x=5
, ou tout ce que je définis x
pour être dans une fonction séparée? En C, ce serait être une variable externe, et je pensais en faire une variable globale devrait accomplir exactement cela.
3 réponses
, Vous devez déclarer x
comme variable globale dans chaque portée (fonction/espace de travail) que vous voulez qu'il soit partagé entre. Donc, vous devez écrire test1
comme:
function test1()
global x;
x = 5;
end
Se référer à votre commentaire vers gnovice en utilisant une variable globale peut être une approche pour résoudre votre problème, mais ce n'est pas couramment utilisé.
Tout d'Abord assurez-vous que votre .m
fichiers sont fonctions de et pas scripts. les Scripts partagent un espace de travail commun, ce qui facilite l'écrasement involontaire de vos variables. En revanche, les fonctions ont leur propre portée.
Utilisez xUnit afin de générer des tests unitaires répétables pour vos fonctions. Par en testant chaque fonction impliquée dans votre programme, vous traquerez la source d'erreur. Avoir votre test unitaire en place, d'autres modifications de code, peuvent être facilement vérifiées.
Un moyen possible de contourner le désordre global
est d'attribuer la variable comme appdata
. Vous pouvez utiliser les fonctions setappdata
et getappdata
pour assigner et récupérer appdata
à partir d'une fenêtre MATLAB. Tant QU'une session MATLAB est active, il existe une fenêtre désignée par 0
.
>> setappdata(0,'x',10) % 0 indicates the root MATLAB window
Maintenant, la variable x n'est visible par aucun script ou fonction, mais peut être accessible partout où cela est nécessaire en utilisant getappdata
.
function test
globalX = getappdata(0,'x');
disp(globalX);
end
x =
10
La bonne nouvelle est que vous pouvez assigner n'importe quel objet MATLAB valide à appdata
, soyez prudent avec les noms, en utilisant des noms uniques pour les champs appdata comme ModelOptimizerOptions
au lieu d'un générique x
,y
ça aiderait. Cela fonctionne également sur les exécutables compilés et le code déployé sur le serveur de production MATLAB.