У меня есть функция, которая возвращает два значения, например:
[a b] = myfunc(x)
Есть ли способ получить второе возвращаемое значение без использования временной переменной и без изменения функции?
Я ищу что-то вроде этого:
abs(secondreturnvalue(myfunc(x)))
Если не будет насущной необходимости сделать это, я бы, вероятно, посоветовал бы ей. Ясность вашего кода будет страдать. Сохранение выходов во временных переменных, а затем передача этих переменных в другую функцию сделает ваш код более чистым, и различные способы, которыми вы могли бы это сделать, изложены здесь: Как элегантно игнорировать некоторые возвращаемые значения функция MATLAB?.
Однако, если вам действительно нужно или нужно это сделать, единственный возможный способ, который я могу придумать, - создать вашу собственную функцию secondreturnvalue
. Здесь более общий пример, называемый nth_output
:
function value = nth_output(N,fcn,varargin)
[value{1:N}] = fcn(varargin{:});
value = value{N};
end
И вы бы назвали его, передав в качестве входов 1) номер выходного аргумента, который вы хотите, 2) дескриптор функции до myfunc
, и 3) любые входные аргументы, необходимые для перехода на myfunc
:
abs(nth_output(2,@myfunc,x))
Не знаю, о чем я знаю. subsref
, похоже, не работает в этом случае, возможно потому, что вторая переменная даже не возвращается из функции.
так как matlab 2009b можно использовать обозначение
[~, b] = function(x)
если вам не нужен первый аргумент, но он по-прежнему использует временную переменную для b
.