webentwicklung-frage-antwort-db.com.de

Deklaration einer globalen Variablen in MATLAB

Gibt es eine Möglichkeit, globale Variablen in MATLAB zu deklarieren?

Bitte antworten Sie nicht mit:

global x y z;

Weil ich auch die Hilfedateien lesen kann.

Ich habe eine globale Variable x deklariert und dann etwas wie das gemacht:

function[x] = test()
    global x;
    test1();
end

Wobei die Funktion test1() definiert ist als:

function test1()
    x = 5;
end

Beim Ausführen von test() lautet meine Ausgabe x = []. Gibt es eine Möglichkeit, den x=5 auszugeben, oder was auch immer ich x als separate Funktion definiere? In C wäre dies eine externe Variable, und ich dachte, eine globale Variable zu schaffen, sollte genau das erreichen.

34
Amit

Sie müssen x als globale Variable in jedem Gültigkeitsbereich (d. H. Funktion/Arbeitsbereich) deklarieren, über den sie freigegeben werden sollen. Sie müssen also test1 schreiben als:

function test1()
  global x;
  x = 5;
end
46
gnovice

Ein Hinweis auf Ihren Kommentar zu gnovice, der eine globale Variable verwendet, kann ein Ansatz sein, um Ihr Problem zu lösen, es wird jedoch nicht häufig verwendet. 

Stellen Sie zunächst sicher, dass Ihre .m-Dateien funktionen und nicht scripts sind. Scripts teilen sich einen gemeinsamen Arbeitsbereich, so dass Sie Ihre Variablen unwillkürlich überschreiben können. Funktionen haben dagegen einen eigenen Umfang. 

Verwenden Sie xUnit , um einen wiederholbaren Komponententest für Ihre Funktionen zu erstellen. Durch Testen der einzelnen Funktionen Ihres Programms ermitteln Sie die Fehlerquelle. Wenn Ihr Gerätetest installiert ist, können weitere Codeänderungen leicht überprüft werden. 

4
zellus

Um das global-Chaos zu umgehen, können Sie die Variable als appdata zuweisen. Sie können die Funktionen setappdata und getappdata verwenden, um appdata aus einem MATLAB-Fenster zuzuweisen und abzurufen. Solange eine MATLAB-Sitzung aktiv ist, gibt es ein mit 0 gekennzeichnetes Fenster.

>> setappdata(0,'x',10)  % 0 indicates the root MATLAB window

Jetzt ist die Variable x für kein Skript oder keine Funktion sichtbar, jedoch kann mit getappdata von überall her auf sie zugegriffen werden.

function test
    globalX = getappdata(0,'x');
    disp(globalX);
end

x =
    10

Die gute Nachricht ist, dass Sie appdata jedes gültige MATLAB-Objekt zuweisen können. Seien Sie nur vorsichtig mit den Namen. Verwenden Sie eindeutige Namen für App-Datenfelder wie ModelOptimizerOptions anstelle einer generischen x, y. Dies funktioniert auch für kompilierte ausführbare Dateien und auf dem MATLAB-Produktionsserver bereitgestellten Code.

1
Some Guy