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

mehre Funktionen in einem m-file

 

GregPhil
Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 06.12.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.05.2011, 19:47     Titel: mehre Funktionen in einem m-file
  Antworten mit Zitat      
Hallo Zusammen,

ich bräuchte einen Tip wie ich das folgende Problem lösen kann:
Da mein Applikation etwas größer geraten ist und nun mehrere m-files umfasst, habe ich mir der Übersichtlichtswillen einige Helper-Funktionen geschrieben (recht trivial um Variablen zu setzen und den aktuellen Wert abzufragen ). Ich habe diese in ein separates M-File gepackt und möchte von mehreren Stellen im Programm darauf zugreifen.

Ich habe nun schon irgendwo gelesen, dass man in Matlab nicht auf mehrere Funktionen die sich in einem m-files befinden,von einer anderen Funktion, welche sich in einem separaten M-file befindet, zugreifen kann. Es ist nur der Zugriff auf mehrere Funktionen möglich, wenn sich diese im gleichen File befinden (Subfunctions) oder nur auf eine, die auch den Namen des m-Files hat.

Leider kann ich meine Helper-funkionen nicht als Subfunctions einbetten, weil ich gerne von Funktionen darauf zugreifen, die sich nicht alle in ein dem selben m-file befinden.

Die einzige Alternative auf die gestoßen bin, bestünde darin die Funktionen in einer Klasse einzubetten. Aber dann habe ich wieder ein Klassen-Objekt, dass ich zwischen den Funktionen die sich in den verschiedenen m-files befinden hin und her reichen muss.

Wie löse ich denn so etwas am elegantesten?

beste Gruesse
Gregor
Private Nachricht senden Benutzer-Profile anzeigen


tompie
Forum-Guru

Forum-Guru


Beiträge: 260
Anmeldedatum: 19.09.07
Wohnort: München
Version: immer alles
     Beitrag Verfasst am: 10.05.2011, 11:24     Titel:
  Antworten mit Zitat      
Hallo,

ich glaube schon, daß man auf mehrere Funktionen, die sich in einem anderen m-File befinden, zugreifen kann. Man kann sich ja zur Laufzeit ein function-handle auf so eine Sub-Funktion erzeugen. Das Zauberwort heißt
Code:
.

Ich habe mir z.B. mal einen Eventhandler geschrieben (das sind Funktionen, die auf bestimmte Events in Objekten reagieren), der aus einem einzigen m-File besteht, in dem alle diese Event-Funktionen gesammelt sind. Also ganz ähnlich wie Dein Helper-Problem.

Die ersten Zeilen dieser Funktion sollten ungefähr so aussehen:

Code:
function f = AllEventHandler(strCtrl,strEvent)
% Alle Events sind hier gesammelt

% Hier wird der eigentliche Function-Handle
% als Rückgabeparameter erzeugt
f = str2func([strCtrl '_' strEvent]);
 


Wenn man jetzt im aufrufenden Programm eine dieser Sub-Funktionen aufrufen möchte, geht das in diesem Beispiel wie folgt:

Code:
f = AllEventHandler('ImageCombo1','Click');  % handle laden
f();                                         % Funktion ausführen
 


Der Handle der Subfunktion wird also erst zur Laufzeit zusammengebaut und erhält dadurch den richtigen Kontext. Die Subfunktion hat in diesem Beispiel den Namen 'ImageCombo1_Click'. Der Befehl str2func baut dann zur Laufzeit daraus einen function handle, der vom aufrufenden Programm gesehen werden kann.

Hoffe, ich habe mich einigermaßen verständlich ausgedrückt.

Gruß tompie
Private Nachricht senden Benutzer-Profile anzeigen
 
GregPhil
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 06.12.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.05.2011, 11:52     Titel:
  Antworten mit Zitat      
Hallo tompie,

ganz schön tricky, klingt jedoch so als ob es funktionieren wuerde.
Ich probiere es gleich mal aus.

Beste Gruesse und danke schon mal vielmals

Gregor
Private Nachricht senden Benutzer-Profile anzeigen
 
GregPhil
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 10
Anmeldedatum: 06.12.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.05.2011, 12:39     Titel:
  Antworten mit Zitat      
Hey tompie...

besten Dank, funktioniert bestens!
Hier mein Code-Schnipsel:
Code:


function f = GetFunctionHandle(FuncsName)
% erzeuge das FuncHandle fuer die Funkion mit dem folgenden Namen (als String) und gebe diese als Rueckgabewerte der Funktion wieder zurueck.
f = str2func(FuncsName);
end

function SetZeroTime(ZeroTime)
....
end

function ZeroTime = GetZeroTime()
....
end

function ResetEventID()
...
end
 


so rufe ich die das ganze dann von wo anders auf:
Code:


hGetZeroTime = GetFunctionHandle('GetZeroTime');
MyZeroTime  = hGetZeroTime();

 


Danke und ne schoene Woche
Greg
Private Nachricht senden Benutzer-Profile anzeigen
 
sansa

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.07.2011, 12:20     Titel:
  Antworten mit Zitat      
Genial!
 
laze
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 69
Anmeldedatum: 12.10.11
Wohnort: Stuttgart
Version: R2013a
     Beitrag Verfasst am: 06.09.2012, 21:24     Titel:
  Antworten mit Zitat      
Wär ich selbst nie draufgekommen, wahnsinn...stand vor einem ähnlichen Problem und dieser Tipp funktioniert einwandfrei

Danke für den Thread^^
_________________

--Wannabe
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.