Как получить второе возвращаемое значение из функции без использования временных переменных? - PullRequest
32 голосов
/ 14 сентября 2010

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

[a b] = myfunc(x)

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

То, что я ищу, выглядит примерно так:

abs(secondreturnvalue(myfunc(x)))

Ответы [ 2 ]

27 голосов
/ 14 сентября 2010

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

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

[~, b] = function(x) 

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

19 голосов
/ 14 сентября 2010

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

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

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

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

abs(nth_output(2,@myfunc,x))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...