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

Bis zu einer bestimmten Funktion zurückspringen

 

Paul23
Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 09.03.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.03.2020, 13:23     Titel: Bis zu einer bestimmten Funktion zurückspringen
  Antworten mit Zitat      
Hallo,

habe folgendes Problem:
Ich rufe aus der main-Funktion eine Funktion 1 auf die wieder eine FUnktion 2 aufruft. Wenn nun in Funktion 2 eine bestimmte Bedingung erfüllt ist, würde ich gerne in die Main-Funktion zurückspringen und ihr ein Array übergeben.

Habe es momentan mit Exceptions versucht. D.h. wenn einebestimmte Bedingung erfüllt ist, wird in der Funktion 2 eine Exception geworfen, die in der Main-Funktion gefangen wird. Aber so viel ich weiß, kann man da kein Array mit übergeben, oder?

Falls nicht, fällt auch eine andere Lösung ein?

EDIT: Was mit gerade noch eingefallen ist, ist mit Exceptions und globalen Variablen zu arbeiten - was aber kein schöner Programmierstiel ist. Bin also für weitere Vorschläge offen Smile
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.03.2020, 13:55     Titel:
  Antworten mit Zitat      
Hallo,

mein Vorschlag wäre, unter dieser Bedingung Funktion 2 zu beenden und das Array sowie, falls nötig, eine Statusinformation an Funktion 1 zurückzugeben. Funktion 1 reagiert entsprechend und reicht diese Informationen an main weiter.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Paul23
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 09.03.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.03.2020, 14:23     Titel:
  Antworten mit Zitat      
Hallo, danke für deine Hilfe.

Bei mehr als 2 Funktionen dazwischen (was bei mir leider der Fall ist) wird das leider etwas umständlich.

Hättest du eventuell noch eine andere Idee?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.03.2020, 14:38     Titel:
  Antworten mit Zitat      
Hallo,

sollte es sich um eine Benutzeroberfläche handeln: den Status in Funktion 2 in eine Eigenschaft schreiben und diese Eigenschaft in der main abfragen.

Ansonsten erscheint mir die try-catch - Lösung noch das sinnvollste.

Die Programmstruktur ist aus meiner Sicht sehr ungewöhnlich. Darüber könnte man auch nochmal nachdenken.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Paul23
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 09.03.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.03.2020, 14:45     Titel:
  Antworten mit Zitat      
Harald hat Folgendes geschrieben:
Hallo,

sollte es sich um eine Benutzeroberfläche handeln: den Status in Funktion 2 in eine Eigenschaft schreiben und diese Eigenschaft in der main abfragen.
Grüße,
Harald


Interessant (habe ich tatsächlich im Einsatz), leider verstehe ich noch nicht ganz wie du das meinst.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

im Falle von App Designer: du kannst die Eigenschaften überall setzen.
im Falle von GUIDE: ich würde setappdata / getappdata verwenden, siehe auch
https://de.mathworks.com/help/matla.....data-among-callbacks.html

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Paul23
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 09.03.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.03.2020, 15:14     Titel:
  Antworten mit Zitat      
Ich glaube ich komme noch nicht ganz mit Smile.

Was du meinst ist, dass Funktion 2 eine GUI ist, die aus der main über eine Funktion 1 aufgerufen wird, oder?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

üblicherweise ist main die GUI.
Letztlich liegt es aber an dir zu sagen, was bei dir was ist und vor allem: ob die GUI mit GUIDE, App Designer oder ganz anders erstellt wurde.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Paul23
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 09.03.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.03.2020, 16:14     Titel:
  Antworten mit Zitat      
Ok, wenn main die GUI ist:

Dann schreibe ich in Funktion 2 das Array in ein Feld der GUI und lese es dann in der GUI aus? Oder was meinst du in diesem Zusammenhang mit "Eigenschaft"?

EDIT: GUI via AppDesigner
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.03.2020, 17:09     Titel:
  Antworten mit Zitat      
Hallo,

genau. Eine App hat ja Eigenschaften (Properties). Du würdest app an Funktion 2 übergeben und in app eine selbst festgelegte Eigenschaft wie app.myprop oder eine Eigenschaft in einer Komponente wie app.component.property setzen. Das Array würde ich auf jeden Fall in eine selbst festgelegte Eigenschaft schreiben.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Paul23
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 09.03.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.03.2020, 18:26     Titel:
  Antworten mit Zitat      
Ok, jetzt ist es schon klarer, danke.
Das wäre ja dann praktisch so:
https://de.mathworks.com/help/matla.....acks-in-app-designer.html
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.03.2020, 22:41     Titel:
  Antworten mit Zitat      
Hallo,

ganz genau.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Paul23
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 09.03.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.03.2020, 16:56     Titel:
  Antworten mit Zitat      
Vielleicht noch kurz zu den Exceptions.
Habe es mal auf die Schnelle so probiert.
Problem: Es werden alle Fehlermeldungen gefangen.
Ich würde aber gerne nur meine Exception fangen, sodass das Programm bei anderen Fehlermeldungen wie bspw. nicht passenden Dimensionen weiterhin abstürzt.

Mein Code:
In der Funktion 2:
Code:
   fehler = MException('Exc:err',"Was ich sagen wollte");
    throw(fehler);


In main:
Code:
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.432
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 14.03.2020, 17:27     Titel:
  Antworten mit Zitat      
Hallo,

das widerspricht dem generellen Konzept von try-catch, nicht nur in MATLAB.

Der Ansatz von gestern mit Eigenschaften in einer App erscheint mir der sinnvollere.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Paul23
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 09.03.20
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.03.2020, 17:30     Titel:
  Antworten mit Zitat      
Ok, danke!

EDIT am Rande: Falls jemand ein änliches Problem hat mit den Exceptions: Hab eine triviale Lösung gefunden
Code:

try...
catch ME
   if strcmp( ME.identifier, someSpecificIdentifier )
      doSomething()
   else
      rethrow( ME )
   end
end
 
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 - 2024 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.