Existe-t-il un moyen de déclarer des variables globales dans MATLAB?
S'il vous plaît ne répondez pas avec:
global x y z;
Parce que je peux aussi lire les fichiers d’aide .
J'ai déclaré une variable globale, x
, puis j'ai fait quelque chose comme ceci:
function[x] = test()
global x;
test1();
end
Où la fonction test1()
est définie comme:
function test1()
x = 5;
end
Lorsque je lance test()
, ma sortie est x = []
. Est-il possible de faire en sorte que le x=5
soit affiché, ou quoi que je définisse x
pour être dans une fonction séparée? En C, il s’agirait d’une variable externe, et j’ai pensé qu’en faire une variable globale devrait suffire.
Vous devez déclarer x
en tant que variable globale dans chaque étendue (c'est-à-dire une fonction/un espace de travail) sur laquelle vous souhaitez que celle-ci soit partagée. Donc, vous devez écrire test1
en tant que:
function test1()
global x;
x = 5;
end
Faire référence à votre commentaire sur gnovice en utilisant une variable globale peut être une approche pour résoudre votre problème, mais ce n’est pas une utilisation courante.
Tout d’abord, assurez-vous que vos fichiers .m
sont functions et non scripts. Scripts partagent un espace de travail commun, ce qui facilite le remplacement involontaire de vos variables. En revanche, les fonctions ont leur propre portée.
Utilisez xUnit afin de générer un test unitaire répétable pour vos fonctions. En testant chaque fonction impliquée dans votre programme, vous localiserez la source d'erreur. Avoir votre test unitaire en place, des modifications supplémentaires du code, peuvent être facilement vérifiées.
Un moyen possible de contourner le désordre global
consiste à affecter la variable à appdata
. Vous pouvez utiliser les fonctions setappdata
et getappdata
pour affecter et extraire appdata
à partir d'une fenêtre MATLAB. Tant qu'une session MATLAB est active, il existe une fenêtre notée 0
.
>> setappdata(0,'x',10) % 0 indicates the root MATLAB window
Désormais, la variable x n'est visible par aucun script ou fonction, mais peut être consultée partout où cela est nécessaire à l'aide de getappdata
.
function test
globalX = getappdata(0,'x');
disp(globalX);
end
x =
10
La bonne nouvelle est que vous pouvez affecter n'importe quel objet MATLAB valide à appdata
. Soyez simplement prudent avec les noms, en utilisant des noms uniques pour les champs appdata tels que ModelOptimizerOptions
au lieu d'un générique x
, y
aiderait. Cela fonctionne également sur les exécutables compilés et le code déployé sur le serveur de production MATLAB.