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

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

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

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

Тестирование на класс массивов

Функция 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