Как получить тип переменной в MATLAB?

Имеется ли в MATLAB функция/оператор, указывающая тип переменной (аналогично оператору typeof в JavaScript)?

Ответ 1

Используйте функцию class

>> b = 2
b =
     2
>> a = 'Hi'
a =
Hi
>> class(b)
ans =
double
>> class(a)
ans =
char

Ответ 2

class() функция эквивалентна typeof()

Вы также можете использовать isa(), чтобы проверить, является ли переменная определенного типа. Если вы хотите быть более конкретным, вы можете использовать ischar(), isfloat(), iscell() и т.д.

Ответ 3

Другая связанная функция whos. Он будет перечислять все виды информации (размеры, размер байта, тип) для переменных в заданной рабочей области.

>> a = [0 0 7];
>> whos a
  Name      Size            Bytes  Class     Attributes

  a         1x3                24  double              

>> b = 'James Bond';
>> whos b
  Name      Size            Bytes  Class    Attributes

  b         1x10               20  char 

Ответ 4

Будьте внимательны при использовании функции isa. Это будет верно, если ваш объект имеет указанный тип или один из его подклассов. Вы должны использовать strcmp с помощью функции class, чтобы проверить, является ли объект конкретным типом, а не подклассом.

Ответ 5

Поскольку никто не упоминал об этом, MATLAB также имеет функцию metaclass, которая возвращает объект с различными битами информации о переданном, в сущности. Эти объекты meta.class могут быть полезны для тестов наследования (через общие операторы сравнения).

Например:

>> metaclass(magic(1))

ans = 

  class with properties:

                     Name: 'double'
              Description: ''
      DetailedDescription: ''
                   Hidden: 0
                   Sealed: 0
                 Abstract: 0
              Enumeration: 0
          ConstructOnLoad: 0
         HandleCompatible: 0
          InferiorClasses: {0×1 cell}
        ContainingPackage: [0×0 meta.package]
     RestrictsSubclassing: 0
             PropertyList: [0×1 meta.property]
               MethodList: [272×1 meta.method]
                EventList: [0×1 meta.event]
    EnumerationMemberList: [0×1 meta.EnumeratedValue]
           SuperclassList: [0×1 meta.class]

>> ?containers.Map <= ?handle

ans =

  logical

   1

Мы видим, что class(someObj) эквивалентно полю Name результата metaclass(someObj).