Чтобы определить класс массива, используйте 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 для классов, выведенных из заданного класса. Для примера, 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
Используйте следующие методы, чтобы исключить подклассы встроенных типов из входных параметров.
Протестируйте входной параметр:
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