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.

33
demandé sur Adriaan 2011-02-06 09:12:59

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
46
répondu gnovice 2014-06-13 02:43:50

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.

4
répondu zellus 2011-02-06 16:46:15

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.

1
répondu Some Guy 2016-08-18 22:26:42