Main Content

配列クラスの判定

クラス名のクエリ

配列のクラスを判定するには、関数 class を使用します。

a = [2,5,7,11];
class(a)
ans =
double
str = 'Character array';
class(str)
ans =
char

配列クラスのテスト

関数 isa を使用して、特定のクラスや数値クラスのカテゴリ (numericfloatinteger) をテストできます。

a = [2,5,7,11];
isa(a,'double')
ans =
     1

浮動小数点値 (単精度および倍精度の値):

isa(a,'float')
ans =
     1

数値 (浮動小数点値および整数値):

isa(a,'numeric')
ans =
     1

isa はサブクラスに true を返す

isa は指定されたクラスから派生したクラスに対して true を返します。たとえば、SubInt クラスは int16 組み込み型から派生します。

classdef SubInt < int16
   methods
      function obj = SubInt(data)
         if nargin == 0
            data = 0;
         end
         obj = obj@int16(data);
      end
   end
end

定義により、SubInt クラスのインスタンスは int16 クラスのインスタンスでもあります。

aInt = SubInt;
isa(aInt,'int16')
ans =
     1

integer カテゴリを使用した場合も true が返されます。

isa(aInt,'integer')
ans =
     1

組み込み型とそのサブクラスを区別する方法の詳細については、組み込み型のサブクラスのテストを参照してください。

特定の型のテスト

関数 class はオブジェクトの "最派生" クラスの名前を返します。

class(aInt)
ans =
SubInt

関数 strcmp を関数 class と共に使用して、オブジェクトの特定のクラスをチェックします。

a = int16(7);
strcmp(class(a),'int16')
ans =
     1

関数 class はクラス名を char ベクトルで返すため、strcmp により実行された比較の結果は継承の影響を受けません。

aInt = SubInt;
strcmp(class(aInt),'int16')
ans =
     0

組み込み型のサブクラスのテスト

関数 isa は指定されたクラスのサブクラスに対して true を返します。MATLAB® 組み込み型でサブクラス以外の入力を必要とする関数を定義するには、以下の手法のいずれかを使用します。

特定の型のテスト

特定の組み込み型をテストするには、strcmpclass を使用します。次の条件文は、inputArgsingle であるかどうかを確認し、そうでない場合は inputArgsingle に変換するよう試みます。

if strcmp(class(inputArg),'single')
   % Call function
else
   inputArg = single(inputArg);
end

型のカテゴリのテスト

double 型または single 型の 2 つの数値入力を必要とする MEX 関数 myMexFcn を作成するとします。

outArray = myMexFcn(a,b)

文字配列 double および single を含む cell 配列を定義します。

floatTypes = {'double','single'};

strcmpclass を使用して、入力が cell 配列で指定された型であるかどうかをテストします。

if any(strcmp(class(a),floatTypes)) && ...
   any(strcmp(class(b),floatTypes))
   outArray = myMexFcn(a,b);
else
   % Try to convert inputs to avoid error
   ...
end

isobject の使用

isobject を使用して、組み込み型を組み込み型のサブクラスと区別します。関数 isobject は、組み込み型のインスタンスに対して false を返します。

% Create a int16 array
a = int16([2,5,7,11]);
isobject(a)
ans =
     0

次の条件文は、arr がいずれかの組み込み整数型の配列であるかどうかをテストします。

if isa(arr,'integer') && ~isobject(arr)
   % if previous statement is true, arr is a built-in integer type
   ...
end