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

clearvars von 'Parent'-Workspace

 

DerBrain87
Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 02.06.16
Wohnort: Burtenbach
Version: ---
     Beitrag Verfasst am: 02.06.2016, 09:09     Titel: clearvars von 'Parent'-Workspace
  Antworten mit Zitat      
Hallo,

ich habe folgendes Problem:
Mein Matlabprojekt hat ein Skript namens Aufruf.m, welches nacheinander mehrere andere Skripte aufruft.
Eins meiner ersten Skripte die diese Aufruf.m aufruft ist eins, welches erstmal 'aufräumen' soll. Hierfür nutze ich u.A. den Befehl clearvars.
Rufe ich dieses Aufräum-Skript manuell auf, macht dieses auch genau das was es soll.
Rufe ich dieses Aufräum-Skript jedoch über die Aufruf.m auf, so entsteht offensichtlich ein 'Unter-Workspace' für das Aufräum-Skript, wodurch clearvars nur diesen löscht. Nach Zurückspringen aus dem Aufräum-Skripts sind wieder alle Variablen da Crying or Very sad

Meine bisherigen Ideen:
Ein Erweitern des Befehls clearvars um den Parameter -global bringt leider ebenfalls nichts.
Ebenfalls habe ich eine Funktion dbup gefunden, die zumindest den übergeordneten Workspace anzeigt (zumindest habe ich das so verstanden) - leider funktioniert dies nur während dem debuggen. Zusätzlich will ich diese ja löschen und nicht nur aufgelistet bekommen...

Daher meine Frage:
Gibt es eine Möglichkeit, dass mein Aufräum-Skript, wenn es durch die Aufruf.m aufgerufen wird, den 'Parent' Workspace aufräumt?
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 02.06.2016, 10:25     Titel: Re: clearvars von 'Parent'-Workspace
  Antworten mit Zitat      
Hallo DerBrain87,

Scripte teilen sich den Worksapce mit dem aufrufenden Code. Eigene Workspaces werden nur von Funktionen erzeugt.
Das "ferngesteuerte" Aufräumen von Variablen in anderen Workspaces ist eine schlechte Programmier-Praxis. Aufräumen sollte man grundsätzlich in der Funktion, in der der "Daten-Müll" auch erzeugt wird, sonst verliert man jede Übersicht, wenn die Programme wachsen.
Noch eleganter ist die Verwendung von Funktionen, bei der grundsätzlich alles automatisch aufgeräumt wird, was nicht explizit als Input oder Output übergeben wird. Damit entfällt jede Annahme über Variablen aus anderen Code-Teilen und man bekommt ein sauberes, stabiles und effizient arbeitendes Programm, dass gut erweiterbar, debugbar und wartbar ist.

Zitat:
Ein Erweitern des Befehls clearvars um den Parameter -global bringt leider ebenfalls nichts.

"-global" löscht globale Variablen, das hat aber nichts mit Deinem Problem zu tun.

Zitat:
Gibt es eine Möglichkeit, dass mein Aufräum-Skript, wenn es durch die Aufruf.m aufgerufen wird, den 'Parent' Workspace aufräumt?

Per evalin kann man clearvars in aufrufenden Code ausführen. Davon rate ich dringend ab!
Verwende lieber ordentliche Funktionen, als mit dem Stahlbesen irgendwelche Dinge von irgendwoher zu bereinigen.
Suche in der Dokumentation nochmal nach dem Unterschied zwischen Scripts und Functions.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
DerBrain87
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 2
Anmeldedatum: 02.06.16
Wohnort: Burtenbach
Version: ---
     Beitrag Verfasst am: 02.06.2016, 10:48     Titel:
  Antworten mit Zitat      
Hallo Jan S,
danke für die schnelle Antwort. Ich finde es Spitze, dass du mir neben dem Befehl den ich gesucht habe auch gleich gesagt hast, dass das pfui ist:-)
Ich habe beim Versuch den Befehl zu integrieren festgestellt, dass du natürlich recht hast und sich Skripte den Workspace teilen^^

Mein Denkfehler war: ich habe in dem 'Aufräum-Skript' die Initialisierung gewisser Variablen hinter dem clearvar. Wenn in meinem Workspace nun nur diese Variablen vorkommen, brauch ich mich nicht wundern, dass nach Ausführen des Skripts diese Variablen nicht verschwinden:-)
Die Vermutung, dass clearvar mit dem 'Direkten Aufruf' alles so macht wie ich es gern hätte kam daher, dass ich wenn ich das Aufräum-Skript separat gestartet habe nen Break-Point VOR der Initialisierung gesetzt habe...
Wie heißt es so schön: 95% der Fehler sitzen vor dem PC - Daher sry für deine aufgeopferte Zeit!

Zum Thema Skript und Funktionen:
Ich nutze in meinem Projekt schon überwiegend Funktionen um die Geschichte mim Aufräumen zu umgehen.
Das ein Skript ein anderes Skript aufruft liegt nur daran, dass mein Projekt aus 5 Teilschritte besteht die ich (nahezu) unabhängig voneinander aufrufen können möchte...
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.