Как проверить, указан ли аргумент в вызове функции?

30

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

Я знаю, что могу использовать 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 ответ

53
Лучший ответ

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

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

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

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

if ~exist('arg1','var') || isempty(arg1)
  arg1=arg1DefaultValue;
end
  • 1
    Это намного лучше, чем nargin, потому что вам не нужно менять код в случае, если вы когда-нибудь измените порядок параметров в функции.
  • 1
    Я обычно также добавляю ... | isempty(arg1) , поэтому пользователь может пропустить arg1 , но указать arg2 . Конечно, если arg1 не может быть пустым.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню