Подтвердить что ты не робот

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

4b9b3361

Ответ 1

Комментарии в основном правы; это не то, что может быть полностью разрешено пользователем, если только MathWorks не добавит функциональности. Тем не менее, я написал небольшую функцию istilde, а затем назад, которая пытается делать то, что вы просите. Он работает во многих случаях, но это действительно немного взломать, а не полностью надежное решение. Например, я не пытался заставить его работать для функций, вызванных из окна Command напрямую (это потенциально может быть добавлено с некоторой работой). Кроме того, он полагается на разбор фактического M файла, который может иметь проблемы. См. Прилагаемый демонстрационный файл для того, как можно использовать istilde.

Не стесняйтесь редактировать мой код для ваших нужд - просто не используйте это в любом производственном коде из-за проблем с надежностью. Любые улучшения будут приветствоваться.