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

handle structure in nested functions

 

keywee
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 64
Anmeldedatum: 29.11.12
Wohnort: Berlin
Version: R2012a
     Beitrag Verfasst am: 01.02.2013, 17:51     Titel: handle structure in nested functions
  Antworten mit Zitat      
ich habe folgendes Problem. Das Programm was ich geschrieben habe wird langsam so groß und unübersichtlich das ich angefangen habe Funktionen auszulagern und sie dann in die einzelnen Callbacks mittels handles einlade.

Code:
function Hauptfunktion_Callback(hObject, eventdata, handles)
Unterfunktion1(handles);
Unterfunktion2(handles);
end


wenn ich nun jedoch in der Unterfunktion1 eine Variable habe mit der Unterfunktion2 weiter rechnen soll bekomme ich das nicht hin. Kann mir jmd ein Minimal Beispiel geben?
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 01.02.2013, 21:33     Titel:
  Antworten mit Zitat      
Hallo,

du musst die Variable aus Unterfunktion1 zurück- und in Unterfunktion2 wieder hineingeben.

Code:
info = Unterfunktion1(handles);
Unterfunktion2(handles, info);


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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 64
Anmeldedatum: 29.11.12
Wohnort: Berlin
Version: R2012a
     Beitrag Verfasst am: 02.02.2013, 00:11     Titel:
  Antworten mit Zitat      
Hab das irgendwie immer noch nicht hinbekommen?

Code:
function Unterfunktion1(handles)

x=1
end


was genau muss jetzt in, welche Funktion noch rein damit ich das x in Funktion 2 benutzen kann.

Code:
function Unterfunktion2(handles)

end
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

lies dir doch bitte den Abschnitt in der Doku über Funktionen durch.
Hier müssen die Funktionen so aussehen:

Code:
function x = Unterfunktion1(handles)

x=1
end


Code:
function Unterfunktion2(handles, x)

end


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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 64
Anmeldedatum: 29.11.12
Wohnort: Berlin
Version: R2012a
     Beitrag Verfasst am: 02.02.2013, 10:39     Titel:
  Antworten mit Zitat      
Hallo Harald,

vielen dank erstmal fuer die schnellen antworten und hilfen.

ich hab mir schon diverse abschnitte durchgelesen und mit trial und error versucht nachzubauen...teils funktionen mit @ probiert leider alles bisher ohne erfolg weil vieles mir zum teil umstaendlich erklaert erscheint.

wie sieht das ganze aus wenn ich mehrere variablen einer funktion uebergeben moechte?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

dann statt x bei den Ein- bzw. Ausgabeargumenten eine Liste der entsprechenden Argumente.

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 64
Anmeldedatum: 29.11.12
Wohnort: Berlin
Version: R2012a
     Beitrag Verfasst am: 02.02.2013, 11:16     Titel:
  Antworten mit Zitat      
ich hänge immer noch fest. ich habe jetzt das GUI als m.file wie folgt:

Code:
function Hauptfunktion_Callback(hObject, eventdata, handles)
Unterfunktion1(handles);
Unterfunktion2(handles);
end
 


in einer seperaten m.file (Unterfunktion1.m) den von dir geposteten code:
Code:
function x = Unterfunktion1(handles)
x=1
end
 


und eine erneute m.file (Unterfunktion2.m):

Code:
function Unterfunktion2(handles, x)
disp(x)
end


bekomme denoch eine fehlermeldung?!?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 02.02.2013, 11:32     Titel:
  Antworten mit Zitat      
Hallo,

du musst die Funktionen auch mit den Ein- und Ausgabeargumenten aufrufen, siehe erster Beitrag.
Das alles wird auch beantwortet in:
Code:


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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 64
Anmeldedatum: 29.11.12
Wohnort: Berlin
Version: R2012a
     Beitrag Verfasst am: 02.02.2013, 15:20     Titel:
  Antworten mit Zitat      
ok vielen dank erstmal dafuer ich glaube jetzt hab ich so im ansatz das prinzip dahinter verstanden. nun noch einmal eine andere frage diesbezueglich.

in der hauptfunktion.m lade ich ich in einem button callback zum beispiel einmal die unterfunktion1.m so wie du beschrieben hast. was auch wunderbar funktioniert. in der unterfunktion1 ist z.b. uigetfile befehl der ein indiziertes bitmap einliesst names x.

function [x] = unterfunktion1(handles)
uigetfile %%%etc...
x=imread(fullfile(pathname, filename));
end

wenn ich ich jetzt in der unterfunktion2.m x uebergebe muss ich auf einmal erneut ein bild waehlen. er führt immer die ganze funktion aus anstatt die variable aus dem workspace von funktion1 an funktion2 zu uebergeben.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

wenn du nur die Variable übergibst, solltest du nicht von neuem das Bild auswählen müssen. Nutze doch mal den Debugger um zu sehen, was in welcher Reihenfolge ausgeführt wird.
Falls das nicht weiterhilft, bitte den gesamten relevanten Code posten.

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 64
Anmeldedatum: 29.11.12
Wohnort: Berlin
Version: R2012a
     Beitrag Verfasst am: 04.02.2013, 09:32     Titel:
  Antworten mit Zitat      
ich habe einfach mal ein einfaches beispiel angehangen. Vielleicht kannst du ja mal einen blick drauf werfen wo genau nun der fehler liegt wenn man die testmain.m ausfuehrt.

testmain.m
 Beschreibung:

Download
 Dateiname:  testmain.m
 Dateigröße:  75 Bytes
 Heruntergeladen:  353 mal
test1.m
 Beschreibung:

Download
 Dateiname:  test1.m
 Dateigröße:  64 Bytes
 Heruntergeladen:  335 mal
test.m
 Beschreibung:

Download
 Dateiname:  test.m
 Dateigröße:  561 Bytes
 Heruntergeladen:  357 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

warum wird uigetfile zwei Mal ausgeführt? Weil du test einmal aus testmain und einmal aus test1 heraus aufrufst.
Mir ist offen gesagt schleierhaft, was du mit den Aufrufen in dieser Form bezweckst. test liest ja das Bild ein, mit dem Bild wird aber in test1 gar nichts gemacht.
Wenn du a,b,c in test1 verwenden möchtest, dann wäre es so sinnvoller:
Code:
function [s,x]=test1(handles,a,b,c)
s = a+b+c;
end

und
Code:
function testmain
[Image,a,b,c] = test;
[s]=test1(0, a, b, c);
disp(s);
disp(Image);
end


Grüße,
Harald
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.