sagen, dass ich eine Funktion foo
definiert alsMatlab: Definieren eines Funktionsgriff zurück zweiten Wert einer Funktion zu kontrollieren
[a b] = foo(c).
Wenn ich eine Funktion hand betrachten
f = @(c)foo(c)
z.B. verwendet werden in einem cellfun
Anruf, was ich bekommen ist ein f
äquivalent zu einem foo
wie
a = foo(c)
heißt definiert verhalten, wird der zurückgegebene Wert b
verloren.
Wenn daher eine solche f
in einem cellfun
Anruf gesetzt wird, wird die Ausgangszelle nur die a
s und verpassen die b
s (über die ich zur Zeit kümmern). Visuell
cellfun(f,input)
[a(input{1})] ?
[a(input{2})] ?
.... b gets killed along the way
Frage: wie Sie einen Funktionsgriff foo
welche Fänge definieren nur die b
s? d.h. gibt ein Verhalten analog zu einer Definition von foo
wie
b = foo(c)
d^2, verschwenden die a
s.
Darüber hinaus ist es möglich (effizient) sowohl a
und b
in einem einzigartigencellfun
Anruf fangen?
Nizza, es funktionierte, was betrifft die 'cellfun' Anruf; In meinem Fall habe ich '[A, B]' und nicht '[~, B]', meine Matlab-Version unterstützt es nicht. So wird der zweite Punkt erfolgreich beantwortet! Soweit ich sehen kann, gilt das generelle Problem, das zweite zurückgegebene Argument in einer Lambda-Definition zu erhalten. Ist es nicht? – Acorbe
@Acorbe Siehe die aktualisierte Antwort. Es ist genau das gleiche - Sie können die Deklaration einer Funktion nicht ändern, aber Sie können mehrere Ausgaben für Ihren anonymen Funktionsaufruf angeben. – angainor
Nun, das sehe ich .. Ich suche immer noch nach etwas, das nicht das '[A, B] = foo' Zeug machen muss. Hauptsächlich für Retrokompatibilitätsprobleme. In der Tat kann man die Funktion 'foo' in eine andere Funktion (Nicht-Funktions-Handle) einbinden, wobei jedoch der Lambda-Geschmack verloren geht. Danke, dass Sie den Teil des Handbuchs hervorheben, den ich nicht sorgfältig genug gelesen habe. – Acorbe