¿Cómo obtengo el segundo valor de retorno de una función sin usar variables temporales?

Tengo una función que devuelve dos valores, así:

[ab] = myfunc(x) 

¿Hay alguna forma de obtener el segundo valor de retorno sin usar una variable temporal y sin alterar la función?

Lo que estoy buscando es algo como esto:

 abs(secondreturnvalue(myfunc(x))) 

A menos que haya una necesidad apremiante de hacer esto, probablemente desaconsejaré. La claridad de tu código sufrirá. Almacenar las salidas en variables temporales y luego pasar estas variables a otra función hará que su código sea más limpio, y las diferentes maneras en que puede hacer esto se describen aquí: ¿Cómo ignorar elegantemente algunos valores de retorno de una función MATLAB? .

Sin embargo, si realmente quiere o necesita hacer esto, la única manera factible en que puedo pensar sería crear su propia función secondreturnvalue . Aquí hay un ejemplo más general llamado nth_output :

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

Y lo llamarías pasando como entradas 1) el número de argumento de salida que deseas, 2) un identificador de función para myfunc , y 3) cualquier argumento de entrada que necesites pasar a myfunc :

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

No que yo sepa. subsref no parece funcionar en este caso, posiblemente porque la segunda variable ni siquiera se devuelve desde la función.

desde matlab 2009b es posible usar la notación

 [~, b] = function(x) 

si no necesita el primer argumento, pero esto todavía usa una variable temporal para b .