Как проверить, указан ли аргумент в вызове функции? - PullRequest
38 голосов
/ 21 декабря 2011

Скажите, что у меня есть функция dummy с 2 аргументами. Аргументы могут иметь значения по умолчанию, если они не указаны в вызове функции. Но откуда мне знать, что аргументы не предоставлены?

Я знаю, что могу использовать nargin, вот так

function dummy(arg1, arg2)
if nargin < 2
    arg2 = 0;
end
if nargin < 1
    arg1 = 0;
end
% function body

Я хочу знать, могу ли я проверить, предоставляются ли аргументы на основе имени аргумента? Что-то вроде supplied(arg2) == false.

Я спрашиваю об этом, потому что иногда я хочу добавить новые аргументы в начало списка аргументов (поскольку он может не иметь значения по умолчанию), а затем я должен изменить все if nargin .... Если я могу проверить по имени, ничего не нужно менять.

1 Ответ

63 голосов
/ 21 декабря 2011

Я всегда так делаю:

if ~exist('arg1','var')
  arg1=0;
end

Как сказал @Andrey, с помощью этого решения вы можете изменять количество / порядок аргументов функции, не меняя код.Это не относится к решению nargin.

Как сказал @yuk, если вы хотите разрешить пропуск аргументов, вы можете сделать:

if ~exist('arg1','var') || isempty(arg1)
  arg1=arg1DefaultValue;
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...