ドキュメンテーション

最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

validateattributes

配列の有効性をチェック

構文

  • validateattributes(A,classes,attributes)
  • validateattributes(A,classes,attributes,argIndex)
  • validateattributes(A,classes,attributes,funcName)
  • validateattributes(A,classes,attributes,funcName,varName)
  • validateattributes(A,classes,attributes,funcName,varName,argIndex)

説明

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 increasing valued.

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

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 を使用した関数入力パラメーターの検証

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)
Argument 'dim2' failed validation with error:
Expected input to be one of these types:

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

Instead its type was char.

関数の引数の検証

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

関数を定義します。

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

入力引数

すべて展開する

A — 入力任意の配列タイプ

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

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

classes — 有効なデータ型文字列のセル配列

文字列のセル配列として指定される有効なデータ型。各文字列は、以下を含む組み込みクラスまたはカスタム クラスの名前です。

'single'単精度数
'double'倍精度数
'int8'符号付き 8 ビット整数
'int16'符号付き 16 ビット整数
'int32'符号付き 32 ビット整数
'int64'符号付き 64 ビット整数
'uint8'符号なしの 8 ビット整数
'uint16'符号なしの 16 ビット整数
'uint32'符号なしの 32 ビット整数
'uint64'符号なしの 64 ビット整数
'logical'論理 true または false
'char'文字または文字列
'struct'構造体配列
'cell'セル配列
'function_handle'関数ハンドル

'numeric'int8int16int32int64uint8uint16uint32uint64singledouble など、関数 isa(A,'numeric') が true を返すすべてのデータ型
'<class_name>'その他のクラス名

データ型: cell

attributes — 有効な属性文字列のセル配列

文字列のセル配列として指定される有効な属性。

A の要素のサイズや数を指定する属性など、一部の属性では数値も必要になります。これらの属性では、数値またはベクトルは、セル配列の属性名文字列の直後に置かれなければなりません。

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

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

A の値の有効な範囲を指定する属性。

'>', Nすべての値が N よりも大きい
'>=', Nすべての値が N 以上
'<', Nすべての値が N よりも小さい
'<=', Nすべての値が N 以下

数値配列または論理配列 A の値の型を確認する属性。

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

データ型: cell

funcName — 入力を検証している関数の名前文字列

入力を検証している関数の名前。文字列として指定します。空の文字列 '' を指定すると、関数 validateattributefuncName 入力を無視します。

データ型: char

varName — 入力変数の名前文字列

入力変数の名前。文字列として指定します。空の文字列 '' を指定すると、関数 validateattributevarName 入力を無視します。

データ型: char

argIndex — 入力引数の位置正の整数

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

データ型: double

この情報は役に立ちましたか?