Определите класс массива

Запрос имени класса

Чтобы определить класс массива, используйте class функция:

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

Тест на класс Array

isa функция позволяет вам протестировать для определенного класса или категории числового класса (numeric, float, integer):

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

Тест для большинства производных классов

Если вы задаете функции, которые требуют входов, которые:

  • MATLAB® встроенные типы

  • Не подклассы встроенных типов MATLAB

Используйте следующие методы, чтобы исключить подклассы встроенных типов из входных параметров.

  • Задайте массив ячеек, который содержит имена встроенных типов, принятых вашей функцией.

  • Звонить class и strcmp для проверки определенных типов в операторе управления MATLAB.

Протестируйте входной параметр:

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

Тест на категорию типов

Предположим, что вы создаете MEX-функцию, myMexFcn, что требует двух числовых входов, которые должны быть типа double или single:

outArray = myMexFcn(a,b)

Задайте массив ячеек, который содержит символьные массивы double и single:

floatTypes = {'double','single'};
% Test for proper types
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 функция возвращает false для образцов встроенных типов:

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

Определите, является ли массив одним из встроенных целых типов:

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