WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

automatisch alle Variablen in Funktion global machen

 

grafiker
Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 07.02.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.02.2012, 13:29     Titel: automatisch alle Variablen in Funktion global machen
  Antworten mit Zitat      
Hi!

Wenn ich in einer Funktion nur einzelne Variablen als global definieren will, kann ich ja schreiben:

Code:


Was mache ich aber, wenn ich grundsätzlich ALLE jemals in einer Funktion definierten Variablen global machen will (d.h. so, dass alle anderen Funktionen auf sie zugreifen können und die Variablen auch im Workspace auftauchen)?

Mein Problem ist, dass ich eine Reihe von Funktionen habe, in denen jeweils ca 200 Variablen benutzt werden. Auf sämtliche Variablen dieser Einzelfunktionen wird nachher von einer anderen Funktion zugegriffen. Nun könnte ich ja mit

Code:


jede einzelne Variable per hand deklarieren, aber das macht bei der menge keinen Sinn (zudem da noch einige Funktionen gleicher Größe dazukommen).

Also, wie kann ich das automatisieren?

Ich weiss, dass das in Matlab (aus gutem Grund!) eigentlich nicht gewollt ist , aber bei meinem konkreten Problem kann ich das unmöglich umgehen.

Grüße
Grafiker
Private Nachricht senden Benutzer-Profile anzeigen


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 17.02.2012, 13:46     Titel:
  Antworten mit Zitat      
globale variablen sind meistens keine gute lösungen. du kannst aber zb lieber die variablen als struct oder cell anlegen oder als array und diese dann immer an die funktion übergeben und falls diese dort drin verändert werde auch wieder zurück geben. ich glaube die lösung ist besser als globale variablen. warum ist es in deinem fall "unmöglich" ohne globale variablen zu arbeiten ?
Private Nachricht senden Benutzer-Profile anzeigen
 
grafiker
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 07.02.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.02.2012, 14:45     Titel:
  Antworten mit Zitat      
Hi!

Also, 'unmöglich' im wesentlich da ich in Matlab mehrere Hundert Funktionen einer Programmiersprache mit anderer Syntax übernehmen will (ist 20 jahre alter code, kann ich leider nix dran machen..). Die aufgabe der jeweiligen Funktionen besteht ausschließlich darin, eine reihe von variablen zu definieren. Jeder dieser Funktionen muss die Möglichkeit haben, auf variablen einer anderen Funkton zuzugreifen.

Das schöne ist nun, dass matlab die reine variablenzuweisung in diesen Fuktionen erkennt (d.h. wenn da steht d=30 dann weiss matlab was damit anzufangen, obwohl der ursprüngliche code aus einer völlig anderen programmiersprache stammt). Wenn dann auch automatisch d=30 als globale variable im workspace vorhanden wäre, wäre mein problem gelöst.

Wenn ich nun aber die variable als struct oder cell oder sonstwie anlegen muss, würde das bedeuten, jede einzelne Funktion prakisch neu zu schreiben. Kommt leider aufgrund der Menge (insges. zehntausende wertzuweisungen) nicht infrage.

grüße
grafiker

EDIT: gelöst! ich verwende einfach skriptaufrufe anstelle von Funktionen. Somit sind alle Variablen automatisch public.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.502
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 17.02.2012, 15:02     Titel:
  Antworten mit Zitat      
Hallo,

ich würde hier sehr vorsichtig sein.

Folgendes Szenario:
Skript A wird aufgerufen und legt Variable t an.
Skript B wird aufgerufen und legt Variable t an.

Wenn es sich wirklich um Zehntausende Zuweisungen handelt, ist das für mich alles andere als abwegig. Was aber abwegig ist: dass irgendjemand noch den Überblick hat, ob das t nun aus Skript A oder B stammt und welche Bedeutung es hat.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
grafiker
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 18
Anmeldedatum: 07.02.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.02.2012, 15:18     Titel:
  Antworten mit Zitat      
Hi!

Erstmal danke für den Einspruch. Allerdings weiss ich genau, in welcher Reihenfolge die betreffenden Programmteile aufgerufen werden müssen. Zudem kommt das Szenario wie du es schilderst regelmäßig vor; dass die Variable dann überschrieben wird ist exakt so gewünscht (entspricht der syntax in der alten programmiersprache). Aus welchem Skript die jeweilige variable kommt, ist eben im Ergebnis nicht relevant. Was ählt, ist nur der wert der dabei rauskommt.

Was den Überblick über die Bedeutung der Variablen angeht: den habe ich vollkommen. hat mich jetzt aber gute 2 Monate gekostet:-)

Grüße
Grafiker
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 17.02.2012, 16:29     Titel:
  Antworten mit Zitat      
Hallo

um zu deiner Frage zurückzukommen, man muss in Matlab explizit die Variablen GLOBAL definieren und das in jeder Funktion, damit man sie nutzen kann.
das könnte man zwar lösen über EVAL und WHOS aber das wäre sehr Fehleranfällig. Gut das du es so gelöst hast.

Alternative wäre SETAPPDATA/GETAPPDATA
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.