|
|
clearvars von 'Parent'-Workspace |
|
DerBrain87 |

Forum-Newbie
|
 |
Beiträge: 2
|
 |
|
 |
Anmeldedatum: 02.06.16
|
 |
|
 |
Wohnort: Burtenbach
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 02.06.2016, 09:09
Titel: clearvars von 'Parent'-Workspace
|
 |
|
 |
|
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
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?
|
|
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 02.06.2016, 10:25
Titel: Re: clearvars von 'Parent'-Workspace
|
 |
|
 |
|
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
|
|
|
DerBrain87 |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 2
|
 |
|
 |
Anmeldedatum: 02.06.16
|
 |
|
 |
Wohnort: Burtenbach
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 02.06.2016, 10:48
Titel:
|
 |
|
 |
|
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...
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
| 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.
|
|