exponenta event banner

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

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

Чтобы определить класс массива, используйте 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