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

Aufruf von nested functions

 

DerBesteMensch
Forum-Anfänger

Forum-Anfänger



Beiträge: 15
Anmeldedatum: 03.07.11
Wohnort: Lummerland
Version: ---
     Beitrag Verfasst am: 20.01.2012, 11:30     Titel: Aufruf von nested functions
  Antworten mit Zitat      
Hallo,

Beim Aufruf des folgenden Programms erhalte ich die Fehlermeldung "It is not possible to obtain a function handle from a variable, namely func":

Code:
function test
c = func(2).nested(4)
end

function x = func(a)
x = nested(2-a);
    function y = nested(b)
        y = 3*a-b;
    end
end


Ich möchte außerhalb der Funktion func auf die nested function nested in func zugreifen. Geht das überhaupt und wenn ja wie? Falls es nicht funktionieren sollte, gibt es dann Alternativvorschläge?
Private Nachricht senden Benutzer-Profile anzeigen


programmierferkel
Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 02.01.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 20.01.2012, 12:10     Titel:
  Antworten mit Zitat      
Ahoi mein bester,

ich glaube nicht, dass das geht - aber ich bin da keien Referenz. Ich glaube du kannst nur an eine Funktion ein Argument übergeben 'y=func(arg)' und erhälst als Antwort 'y'. Ich glaube ALLES was in der Funktion passiert darauf hast du keinen Zugriff. Warum willst du die Funktionen überhaupt verschachteln? Du kannst sie einfach nacheinander schreiben. Ansonsten musst du schon bei der ersten Funkion ein zweites Argument übergeben y=f(arg1,arg2).

Deine Syntax verstehe ich jetzt auch nicht. Wenn du schreibst

c = func(2).nested(4) heißt das für mich func ist eine Struktur. Nimm den 4. Eintrag des Feldes nested aus der zweiten Dimension von func.

LG ferkel
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

was sollte denn in deinem Fall für c herauskommen?

Anders gefragt: soll nested nun für b=2-a oder für b=4 ausgewertet werden?

Ich würde allein aus Gründen der Übersichtlichkeit von solchen Konstrukten abraten.

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

Forum-Anfänger

Forum-Anfänger



Beiträge: 15
Anmeldedatum: 03.07.11
Wohnort: Lummerland
Version: ---
     Beitrag Verfasst am: 20.01.2012, 12:39     Titel:
  Antworten mit Zitat      
Danke schonmal für die Antwort,

Natürlich könnte man das mit der Verschachtelung auch komplett lassen und nested einfach als Funktion auf der gleichen Ebene von test und func schreiben. Die Verschachtelung soll einfach ausdrücken, dass nested von seiner Funktion her eben ein "kleiner Teil" von func sein soll und nichts "vollwertig Eigenständiges" wie zB func darstellt.

Das hier angegebene Programm dient auch lediglich zu Demonstrationszwecken um mein Anliegen deutlich zu machen; mir ist schon bewusst, dass das Beharren auf Verschachtelung in diesem Beispiel völlig sinnlos ist, aber es geht wie gesagt ums Prinzip Smile

Bezüglich des Syntax beim Aufruf von nested habe ich mich an meiner Programmiererfahrung in Java orientiert, da man dort geschachtelte Funktionen eben genau so aufruft. Soll bedeuten:

"Rufe func auf mit Eingabe-Argument "2" und rufe dann in func die nested function nested auf mit Eingabe-Argument "4"

Edit:
Herauskommen sollte c = 2, da die Auswertung von nested für b = 4 erfolgen soll
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

wie wärs dann damit?
Code:

function test
c = func(2, 4)
end

function x = func(a, b)
x = nested(b);
    function y = nested(b)
        y = 3*a-b;
    end
end  


Grüße,
Harald

P.S.: das "2-a" wird dann nirgends verwendet, oder?
Private Nachricht senden Benutzer-Profile anzeigen
 
DerBesteMensch
Themenstarter

Forum-Anfänger

Forum-Anfänger



Beiträge: 15
Anmeldedatum: 03.07.11
Wohnort: Lummerland
Version: ---
     Beitrag Verfasst am: 20.01.2012, 16:24     Titel:
  Antworten mit Zitat      
Hey Harald,

Danke für deinen Vorschlag. Hat halt nur den Nachteil, dass func dann nicht mehr benutzt werden kann um x = nested(2-a) zurückzugeben (auch wenn das in meinem Beispiel nicht gebraucht wird).

Aber ich sehe ein, dass mein Problem wirklich sehr konstruiert ist und werde nun doch auf die Verschachtelung verzichten und es auf konventionellem Weg mit nested auf der Ebene von func und test machen.
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.