Скажем, у меня есть функция foo
, которая может вернуть три значения, заданных для ввода:
function [a,b,c] = foo(input)
Вычисления переменных b
и c
занимают много времени, поэтому иногда я могу игнорировать их вычисления в пределах foo
. Если я хочу игнорировать оба вычисления, я просто вызываю функцию следующим образом:
output1 = foo(input);
а затем включите nargout
в пределах foo
:
if nargout == 1
% Code to calculate "a" only
else
% Code to calculate other variables
Проблема возникает, если я хочу вычислить последний вывод, но не второй. В этом случае мой вызов функции будет:
[output1,~,output3] = foo(input);
Теперь, если я использую nargout
внутри foo
, чтобы проверить, сколько выходов находится в вызове функции, оно всегда будет возвращать 3
, потому что оператор тильды (~
) считается допустимым выходом. Поэтому я не могу использовать nargout
, чтобы определить, следует ли вычислять второй вывод b
, внутри foo
.
Есть ли другой способ сделать это? I.e., можно ли проверить, какие выходы функции-вызова отбрасываются из самой функции?