Скажем, у меня есть функция 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., можно ли проверить, какие выходы функции-вызова отбрасываются из самой функции?