в вашем конкретном случае. вы можете использовать nargin
, чтобы определить, сколько входных аргументов здесь предоставлено при вызове функции.
из документации MATLAB :
Функции nargin и nargout позволяют определить, сколько входных и выходные аргументы функция звонил с. Затем вы можете использовать условные операторы для выполнения разные задачи в зависимости от количество аргументов. Например,
function c = testarg1(a, b)
if (nargin == 1)
c = a .^ 2;
elseif (nargin == 2)
c = a + b;
end
Учитывая единственный входной аргумент, это функция возводит в квадрат входное значение. Учитывая два входа, он складывает их вместе.
NaN
, хотя и не эквивалентен, часто служит той же цели.
nargin
определенно самый простой способ сделать это. Также обычно рекомендуется проверять количество входных аргументов с помощью nargchk :
function e = testFunc(a,b,c,d)
error( nargchk(2, 4, nargin, 'struct') );
% set default values
if nargin<4, d = 0; end
if nargin<3, c = 0; end
% ..
c = a*b + c*d;
end
... который действует как способ гарантировать, что передано правильное количество аргументов. В этом случае требуется минимум два аргумента, максимум четыре .
Если nargchk
не обнаруживает ошибки, выполнение продолжается в обычном режиме, в противном случае генерируется ошибка. Например, вызов testFunc (1)
генерирует:
Not enough input arguments.
ОБНОВЛЕНИЕ: в R2011b
narginchk
была введена новая функция, которая заменяет использование устаревшегоnargchk
+ошибка
, показанная выше:narginchk (2,4);
Вы можете использовать такие функции, как: exist и isempty , чтобы проверить, существует ли переменная и пуста ли она соответственно:
if ~exist('c','var') || isempty(c)
c = 10;
end
, который позволяет вам вызывать вашу функцию, например: testFunc (1,2, [], 4)
сообщает ему использовать значение по умолчанию для c
, но все же дает значение для d
Вы также можете использовать varargin , чтобы принимать переменное количество аргументов.
Наконец, мощный способ синтаксического анализа и проверки именованных входов - использовать inputParser
Для просмотра примеров и других альтернатив передачи аргументов и установки значений по умолчанию , ознакомьтесь с этим сообщением и комментариями к нему.