2010-09-14 2 views
29

Ho una funzione che restituisce due valori, in questo modo:Come posso ottenere il secondo valore di ritorno da una funzione senza utilizzare variabili temporanee?

[a b] = myfunc(x) 

C'è un modo per ottenere il secondo valore di ritorno senza l'utilizzo di una variabile temporanea, e senza alterare la funzione?

Quello che sto cercando è qualcosa di simile:

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

Che dire di usare una classe invece di una funzione con i corrispondenti metodi 'getter'. Si potrebbe ottenere qualcosa come abs (myfunc.secondReturnValue (x)). – zellus

+0

Inviando questa opzione come richiesta di pseudo-funzione a MathWorks. –

risposta

16

A meno che non vi sia un bisogno urgente di farlo, probabilmente sconsiglio di farlo. La chiarezza del tuo codice ne risentirà. Memorizzare le uscite in variabili temporanee e passare queste variabili a un'altra funzione renderà il tuo codice più pulito, e i diversi modi in cui potresti farlo sono qui delineati: How to elegantly ignore some return values of a MATLAB function?.

Tuttavia, se si desidera o è necessario effettuare , l'unico modo possibile che posso pensare sarebbe creare la propria funzione secondreturnvalue. Ecco un esempio più generale chiamato nth_output:

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

E si chiamerebbe passando come ingressi 1) il numero di argomento di output desiderato, 2) un function handle per myfunc, e 3) tutto ciò argomenti di input è necessario passare a myfunc:

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

Non che io sappia. subsref non sembra funzionare in questo caso, probabilmente perché la seconda variabile non viene nemmeno restituita dalla funzione.

poiché MATLAB 2009b è possibile utilizzare la notazione

[~, b] = function(x) 

se non è necessario il primo argomento, ma questo usa ancora una variabile temporanea per b.