Валидация количества аргументов функции

В этом примере показано, как проверять, получает ли ваша пользовательская функция верный номер аргументов ввода или вывода. MATLAB® выполняет некоторые проверки аргумента автоматически. Для других случаев можно использовать narginchk или nargoutchk.

Автоматические проверки аргумента

MATLAB проверяет, получает ли ваша функция больше аргументов, чем ожидалось, когда это может определить номер из функционального определения. Например, эта функция принимает до двух выходных параметров и три входных параметров:

function [x,y] = myFunction(a,b,c)

Если вы передаете слишком много входных параметров myFunction, MATLAB выдает ошибку. Вы не должны вызывать narginchk проверять на этот случай.

[X,Y] = myFunction(1,2,3,4)
Error using myFunction
Too many input arguments.

Используйте narginchk и nargoutchk функции, чтобы проверить, что ваша функция получает:

  • Минимальное количество обязательных аргументов.

  • Не больше, чем максимальное количество аргументов, когда ваша функция использует varargin или varargout.

Введите Сверяется с narginchk

Задайте функцию в файле с именем testValues.m это требует по крайней мере двух входных параметров. Первый вход является пороговым значением, чтобы выдержать сравнение с другими входными параметрами.

function testValues(threshold,varargin)
minInputs = 2;
maxInputs = Inf;
narginchk(minInputs,maxInputs)

for k = 1:(nargin-1)
   if (varargin{k} > threshold)
      fprintf('Test value %d exceeds %d\n',k,threshold);
   end
end

Вызовите testValues с очень небольшим числом входных параметров.

testValues(10)
Error using testValues (line 4)
Not enough input arguments.

Вызовите testValues с достаточным количеством входных параметров.

testValues(10,1,11,111)
Test value 2 exceeds 10
Test value 3 exceeds 10

Выведите Сверяется с nargoutchk

Задайте функцию в файле с именем mysize.m это возвращает размерности входного массива в векторе (от size функция), и опционально возвращает скалярные значения, соответствующие размерам каждой размерности. Используйте nargoutchk проверять, что количество требуемых отдельных размеров не превышает количество доступных размерностей.

function [sizeVector,varargout] = mysize(x)
minOutputs = 0;
maxOutputs = ndims(x) + 1;
nargoutchk(minOutputs,maxOutputs)

sizeVector = size(x);

varargout = cell(1,nargout-1);
for k = 1:length(varargout)
   varargout{k} = sizeVector(k);
end

Вызовите mysize с верным номером выходных параметров.

A = rand(3,4,2);
[fullsize,nrows,ncols,npages] = mysize(A)
fullsize =
     3     4     2

nrows =
     3

ncols =
     4

npages =
     2

Вызовите mysize со слишком многими выходными параметрами.

A = 1;
[fullsize,nrows,ncols,npages] = mysize(A)
Error using mysize (line 4)
Too many output arguments.

Смотрите также

|

Похожие темы