Ich versuche eine anonyme Funktion zu definieren, die eine Version einer Funktion aufruft, die mehrere Ausgaben zurückgibt.
Zum Beispiel hat die Funktion find
zwei mögliche Ausgabeformen:
und
%Vor%Sagen wir, ich möchte das erste Formular innerhalb einer anonymen Funktion auswählen.
Ich habe es versucht 1)
%Vor%und 2)
%Vor%Aber wenn ich rufe:
%Vor% Die erste Version von get_columns
denkt ich rufe find
als [ind] = find(X)
und nicht als [row,col] = find(X);
an, während die zweite mit "Not enough input arguments"
klagt.
Gibt es eine Möglichkeit, eine spezifische Ausgabeform einer Funktion innerhalb einer anonymen Funktion auszulösen?
Direkt, nein. Leider gibt es eine Reihe von Funktionen, auf die über anonyme Funktionen nicht zugegriffen werden kann, und der Zugriff auf mehrere Ausgabeargumente ist einer davon. (Die andere, die ich häufig finde, ist, dass Sie keine if
-Anweisung innerhalb einer anonymen Funktion definieren können. Dies scheint mehr als alles andere eine Einschränkung der Matlab-Syntax zu sein.
Aber eine ziemlich einfache Hilfsfunktion kann dies ermöglichen.
%Vor%Diese Funktion verwendet eine Funktionskennung sowie ein Array von Ausgabeindizes und gibt die indizierten Ausgaben zurück.
Wenn Sie diese Datei (hoffentlich besser kommentiert) erstellen und auf Ihren Pfad setzen, können Sie auf die zweite Ausgabe der Funktion find
zugreifen, indem Sie die folgende Funktion definieren
Und jetzt können Sie die Indizes eines Arrays finden, die gleich 1 sind wie
%Vor%Und jetzt sollten Sie in der Lage sein, auf alternative Ausgabeargumente nach Wunsch innerhalb von anonymen Funktionen zuzugreifen.
Diese Funktion get_outputs
könnte für kurze anonyme Funktionen sehr nützlich sein. Sehr nett.
Auch in Bezug auf den Kommentar, dass ein "if" in MATLAB nicht verwendet werden kann, ist dies nur teilweise richtig. Identisches Verhalten kann einfach anonym implementiert werden. Zum Beispiel, hier ist ein anonymes wenn:
%Vor%Verwenden:
%Vor%Die Aktion, die der ersten wahren Bedingung entspricht, wird ausgeführt. Zum Beispiel gibt dies "Hallo" aus.
%Vor%Zugegeben, es ist auf den ersten Blick etwas kompliziert, aber ich halte so etwas auf meinem Weg, damit ich ein "wenn" in einer anonymen Funktion verwenden kann. Auf diese Weise können viel komplexere anonyme Funktionen erstellt werden.
Tags und Links matlab