2010-09-14 13 views
29

Ich habe eine Funktion, die zwei Werte zurückgibt, etwa so:Wie bekomme ich den zweiten Rückgabewert von einer Funktion, ohne temporäre Variablen zu verwenden?

[a b] = myfunc(x) 

Gibt es eine Möglichkeit, den zweiten Rückgabewert zu erhalten, ohne eine temporäre Variable verwendet, und ohne die Funktion zu verändern?

Was ich suche ist so etwas wie dieses:

abs(secondreturnvalue(myfunc(x))) 
+0

Was ist mit der Verwendung einer Klasse anstelle einer Funktion mit entsprechenden "Getter" -Methoden. Sie könnten etwas wie abs (myfunc.secondReturnValue (x)) bekommen. – zellus

+0

Aktualisiere dies als Pseudo-Feature-Anfrage an MathWorks. –

Antwort

16

Wenn es keine dringende Notwendigkeit gibt, dies zu tun, würde ich wahrscheinlich davon abraten. Die Klarheit Ihres Codes wird leiden. Das Speichern der Ausgaben in temporären Variablen und das anschließende Übergeben dieser Variablen an eine andere Funktion wird Ihren Code sauberer machen, und die verschiedenen Möglichkeiten, die Sie dazu tun können, finden Sie hier: How to elegantly ignore some return values of a MATLAB function?.

Wenn Sie jedoch wirklich wollen oder müssen, um dies zu tun, wäre die einzige mögliche Weise, die ich denken könnte, um Ihre eigene Funktion secondreturnvalue zu erstellen. Hier ist ein allgemeineres Beispiel nth_output genannt:

function value = nth_output(N,fcn,varargin) 
    [value{1:N}] = fcn(varargin{:}); 
    value = value{N}; 
end 

Und Sie würden es nennen, indem man als Eingänge 1) die Ausgabeargument Nummer, die Sie wünschen, 2) eine function handle zu myfunc und 3), was Eingabeargumente müssen Sie passieren zu myfunc:

abs(nth_output(2,@myfunc,x)) 
27

nicht, dass ich wüsste. subsref scheint in diesem Fall nicht zu funktionieren, möglicherweise, weil die zweite Variable nicht einmal von der Funktion zurückgegeben wird.

seit Matlab 2009b ist es möglich, die Notation

[~, b] = function(x) 

zu verwenden, wenn Sie das erste Argument nicht brauchen, aber das nutzt noch eine temporäre Variable für b.

Verwandte Themen