subfunciones - funciones en matlab programacion
¿Cómo obtengo el segundo valor de retorno de una función sin usar variables temporales? (2)
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))
Tengo una función que devuelve dos valores, así:
[a b] = 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)))
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
.