Main Content

validateattributes

配列の有効性をチェック

説明

validateattributes(A,classes,attributes) は、配列 A が少なくとも 1 つの指定されたクラス (またはサブクラス) に属しており、指定されたすべての属性をもっていることを検証します。A が条件を満たさない場合、MATLAB® はエラーをスローして形式化されたエラー メッセージを表示します。それ以外の場合、validateattributes はどのような出力も表示せずに完了します。

validateattributes(A,classes,attributes,argIndex) は、生成されるエラー メッセージの一部として関数の引数リストに入力の位置を含めます。

validateattributes(A,classes,attributes,funcName) は、生成されるエラー識別子に指定された関数の名前を含めます。

validateattributes(A,classes,attributes,funcName,varName) は、生成されるエラー メッセージに指定された変数の名前を含めます。

validateattributes(A,classes,attributes,funcName,varName,argIndex) は、生成されるエラー メッセージまたはエラー識別子に指定された情報を含めます。

すべて折りたたむ

classes = {'numeric'};
attributes = {'size',[4,6,2]};

A = rand(3,5,2);
validateattributes(A,classes,attributes)
Expected input to be of size 4x6x2 when it is actually size 3x5x2.

A は指定された属性と一致しなかったため、MATLAB はエラー メッセージをスローします。

配列が増加している、または減少していないかどうかを判別します。

A = [1 5 8 2;
     9 6 9 4]
validateattributes(A, {'double'},{'nondecreasing'})
validateattributes(A, {'double'},{'increasing'})
A =

     1     5     8     2
     9     6     9     4

A は増加していてかつ減少していないため、validateattributes ではいずれの属性チェックでもエラーはスローされません。

A(2,3)A(1,3) に等しく設定すると、厳密に増加していない列が生成されるため、validateattributes はエラーをスローします。

A(2,3) = 8
validateattributes(A, {'double'},{'increasing'})
A =

     1     5     8     2
     9     6     8     4

Expected input to be strictly increasing.

ただし、各列要素は前の列要素以上であるため、列は減少しないままです。次のコードではエラーはスローされません。

validateattributes(A, {'double'},{'nondecreasing'})

a が関数の 2 番目の入力引数であると仮定し、非負であることを確認します。

a = complex(1,1);
validateattributes(a,{'numeric'},{'nonnegative'},2)
Expected input number 2 to be nonnegative.

複素数の複素平面には適切に定義された順序がないため、validateattributes はこれを正とも負とも認識しません。

配列の値が 0 と 10 の間の 8 ビット整数であることをチェックします。

このコードは Rankings という関数内にあると仮定します。

classes = {'uint8','int8'};
attributes = {'>',0,'<',10};
funcName = 'Rankings';
A = int8(magic(4));

validateattributes(A,classes,attributes,funcName)
Error using Rankings
Expected input to be an array with all of the values < 10.

inputParser で入力パラメーターを確認するカスタム関数を作成し、validateattributesaddRequired メソッドと addOptional メソッドの検証関数として使用します。

関数を定義します。

function a = findArea(shape,dim1,varargin)
   p = inputParser;
   charchk = {'char'};
   numchk = {'numeric'};
   nempty = {'nonempty'};

   addRequired(p,'shape',@(x)validateattributes(x,charchk,nempty))
   addRequired(p,'dim1',@(x)validateattributes(x,numchk,nempty))
   addOptional(p,'dim2',1,@(x)validateattributes(x,numchk,nempty))
   parse(p,shape,dim1,varargin{:})
 
   switch shape
      case 'circle'
         a = pi * dim1.^2;
      case 'rectangle'
         a = dim1 .* p.Results.dim2;
   end
end

数値以外の 3 番目の入力を使用して関数を呼び出します。

myarea = findArea('rectangle',3,'x')
Error using findArea (line 10)
The value of 'dim2' is invalid. Expected input to be one of these types:

double, single, uint8, uint16, uint32, uint64, int8, int16, int32, int64

関数の入力を確認し、生成されたエラーに入力名と位置についての情報を含めます。

関数を定義します。

function v = findVolume(shape,ht,wd,ln)
   validateattributes(shape,{'char'},{'nonempty'},mfilename,'Shape',1)
   validateattributes(ht,{'numeric'},{'nonempty'},mfilename,'Height',2)
   validateattributes(wd,{'numeric'},{'nonempty'},mfilename,'Width',3)
   validateattributes(ln,{'numeric'},{'nonempty'},mfilename,'Length',4)

入力引数 shape を含めずに関数を呼び出します。

vol = findVolume(10,7,4)
Error using findVolume
Expected input number 1, Shape, to be one of these types:

char

Instead its type was double.

Error in findVolume (line 2)
validateattributes(shape,{'char'},{'nonempty'},mfilename,'Shape',1)

関数名がエラー識別子の一部になります。

MException.last.identifier
ans =

MATLAB:findVolume:invalidType

入力引数

すべて折りたたむ

任意の配列タイプとして指定される入力。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical | char | string | struct | cell | function_handle
複素数のサポート: あり

有効なデータ型。文字ベクトル、文字ベクトルの cell 配列、または string 配列として指定します。classes の各要素は、以下を含む組み込みクラスまたはカスタム クラスの名前です。

'half'半精度数
'single'単精度数
'double'倍精度数
'int8'符号付き 8 ビット整数
'int16'符号付き 16 ビット整数
'int32'符号付き 32 ビット整数
'int64'符号付き 64 ビット整数
'uint8'符号なしの 8 ビット整数
'uint16'符号なしの 16 ビット整数
'uint32'符号なしの 32 ビット整数
'uint64'符号なしの 64 ビット整数
'logical'logical 1 (true) または 0 (false)
'char'文字
'string'string 配列
'struct'構造体配列
'cell'cell 配列
'table'table
'timetable'timetable
'function_handle'関数ハンドル
'numeric'int8int16int32int64uint8uint16uint32uint64singledouble など、関数 isa(A,'numeric') が true を返すすべてのデータ型
'<class_name>'その他のクラス名

データ型: cell | string

有効な属性。cell 配列または string 配列として指定します。

A の要素のサイズや数を指定する属性など、一部の属性では数値も必要になります。そのような属性の場合、数値またはベクトルは cell 配列の属性名の直後になければなりません。string 配列を使用して attributes の数値を表すことはできません。

配列 A のサイズおよび形状を記述する属性は次のとおりです。

'2d'スカラー、ベクトル、行列および空の配列を含む 2 次元の配列
'3d'次元が 3 以下の配列
'column'列ベクトル (N 行 1 列)
'row'行ベクトル (1 行 N 列)
'scalar'スカラー値 (1 行 1 列)
'scalartext'string スカラーまたは文字ベクトルのいずれか (0 文字の入力を含む)
'vector'行または列ベクトル、あるいはスカラー値
'size', [d1,...,dN]d1×...×dN 次元の配列。特定の次元の確認を省略するには、その次元に対して NaN を、[3,4,NaN,2] のように指定します。
'numel', NN 要素の配列
'ncols', NN 列の配列
'nrows', NN 行の配列
'ndims', NN 次元の配列
'square'正方行列 (行と列の数が等しい 2 次元配列)
'diag'対角行列
'nonempty'0 に等しい次元なし
'nonsparse'スパースでない配列

A の値の有効な範囲を指定する属性は次のとおりです。

'>', Nすべての値が N よりも大きい
'>=', Nすべての値が N 以上
'<', Nすべての値が N よりも小さい
'<=', Nすべての値が N 以下
'finite'すべての値が有限
'nonnan'どの値も NaN (非数) ではない

数値配列または logical 配列 A の値の型を確認する属性は次のとおりです。

'binary'1 と 0 の配列
'even'偶数の整数の配列 (0 を含む)
'odd'奇数の整数の配列
'integer'整数値の配列
'real'実数値の配列
'nonnegative'0 より小さい要素なし
'nonzero'0 に等しい要素なし
'positive'0 以下の要素なし
'decreasing'列の各要素が前の要素より小さく、NaN である要素が存在しない
'increasing'列の各要素が前の要素より大きく、NaN である要素が存在しない
'nondecreasing'列の各要素が前の要素以上で、NaN である要素が存在しない
'nonincreasing'列の各要素が前の要素以下で、NaN である要素が存在しない

データ型: cell

検証する関数の名前。文字ベクトルまたは string スカラーとして指定します。空の文字ベクトル '' または string の <missing> を指定した場合、関数 validateattributesfuncName の入力を無視します。

データ型: char | string

入力変数の名前。文字ベクトルまたは string スカラーとして指定します。空の文字ベクトル '' または string の <missing> を指定した場合、関数 validateattributesvarName の入力を無視します。

データ型: char | string

入力引数の位置。正の整数として指定します。

データ型: double

拡張機能

バージョン履歴

R2007b で導入