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

32

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

[a b] = myfunc(x)

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

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

abs(secondreturnvalue(myfunc(x)))
  • 0
    Как насчет использования класса вместо функции с соответствующими методами 'getter'. Вы можете получить что-то вроде abs (myfunc.secondReturnValue (x)).
  • 0
    Выражение этого как псевдо-функциональный запрос к MathWorks.
Теги:

2 ответа

16
Лучший ответ

Если не будет насущной необходимости сделать это, я бы, вероятно, посоветовал бы ей. Ясность вашего кода будет страдать. Сохранение выходов во временных переменных, а затем передача этих переменных в другую функцию сделает ваш код более чистым, и различные способы, которыми вы могли бы это сделать, изложены здесь: Как элегантно игнорировать некоторые возвращаемые значения функция 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))
26

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

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

[~, b] = function(x) 

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню