Скажем, что у меня есть функция 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 ...
. Если я могу проверить по имени, ничего не нужно менять.
Я всегда так делаю:
if ~exist('arg1','var')
arg1=0;
end
Как сказал @Andrey, с помощью этого решения вы можете изменить число/порядок аргументов функции, не меняя код. Это не относится к решению nargin
.
Как сказано @yuk, если вы хотите разрешить пропустить аргументы, вы можете сделать:
if ~exist('arg1','var') || isempty(arg1)
arg1=arg1DefaultValue;
end
... | isempty(arg1)
, поэтому пользователь может пропуститьarg1
, но указатьarg2
. Конечно, еслиarg1
не может быть пустым.