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

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

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

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

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

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

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