Как мне получить второе возвращаемое значение из функции без использования временных переменных?

У меня есть функция, которая возвращает два значения, например:

[a b] = myfunc(x)

Есть ли способ получить второе возвращаемое значение без использования временной переменной и без изменения функции?

Я ищу что-то вроде этого:

abs(secondreturnvalue(myfunc(x)))

person jjkparker    schedule 14.09.2010    source источник
comment
А как насчет использования класса вместо функции с соответствующими методами получения? Вы можете получить что-то вроде abs (myfunc.secondReturnValue (x)).   -  person zellus    schedule 15.09.2010
comment
Голосование за это как псевдофункциональный запрос к MathWorks.   -  person David Kelley    schedule 07.03.2017


Ответы (2)


Если в этом нет острой необходимости, я бы, вероятно, не советовал это делать. Пострадает ясность вашего кода. Сохранение выходных данных во временных переменных с последующей передачей этих переменных в другую функцию сделает ваш код более чистым, и здесь описаны различные способы сделать это: Как элегантно игнорировать некоторые возвращаемые значения функции MATLAB?.

Однако, если вы действительно хотите или должны это сделать, единственный возможный способ, который я могу придумать, - это создать свою собственную функцию secondreturnvalue. Вот более общий пример под названием nth_output:

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

И вы могли бы вызвать его, передав в качестве входных данных 1) номер выходного аргумента, который вы хотите, 2) a дескриптор функции в myfunc и 3) любые входные аргументы, которые необходимо передать в myfunc:

abs(nth_output(2,@myfunc,x))
person gnovice    schedule 14.09.2010

не то, что я знаю из. subsref, похоже, не работает в этом случае, возможно потому, что вторая переменная даже не возвращается из функции.

начиная с Matlab 2009b можно использовать обозначение

[~, b] = function(x) 

если вам не нужен первый аргумент, но он по-прежнему использует временную переменную для b.

person second    schedule 14.09.2010