Как определить, не используется ли выход функции-вызова (MATLAB)
Скажем, у меня есть функция 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., можно ли проверить, какие выходы функции-вызова отбрасываются из самой функции?
Ответы
Ответ 1
Комментарии в основном правы; это не то, что может быть полностью разрешено пользователем, если только MathWorks не добавит функциональности. Тем не менее, я написал небольшую функцию istilde
, а затем назад, которая пытается делать то, что вы просите. Он работает во многих случаях, но это действительно немного взломать, а не полностью надежное решение. Например, я не пытался заставить его работать для функций, вызванных из окна Command напрямую (это потенциально может быть добавлено с некоторой работой). Кроме того, он полагается на разбор фактического M файла, который может иметь проблемы. См. Прилагаемый демонстрационный файл для того, как можно использовать istilde
.
Не стесняйтесь редактировать мой код для ваших нужд - просто не используйте это в любом производственном коде из-за проблем с надежностью. Любые улучшения будут приветствоваться.