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

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


person Dónal    schedule 23.02.2009    source источник


Ответы (6)


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

>> b = 2
b =
     2
>> a = 'Hi'
a =
Hi
>> class(b)
ans =
double
>> class(a)
ans =
char
person Daniel LeCheminant    schedule 23.02.2009
comment
для условных выражений: if ( string(class(b)) == 'double' ) fprintf(1, 'b is double'); end - person khaverim; 16.04.2020
comment
Обратите внимание, что вы можете перегрузить метод class в настраиваемом классе, чтобы вернуть любую случайную строку. - person Cris Luengo; 09.12.2020

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

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

person Dima    schedule 23.02.2009
comment
Обратите внимание, что в настраиваемом классе вы можете перегрузить все эти методы, чтобы вернуть все, что захотите. - person Cris Luengo; 09.12.2020

Другая связанная функция - 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 
person gnovice    schedule 11.03.2009
comment
Функция ВОЗ не отображает размер переменных. Из-за этого это намного быстрее, если ваше рабочее место переполнено. - person JaBe; 01.07.2014

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

person Mike Katz    schedule 11.03.2009

Поскольку никто не упомянул об этом, 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).

person Dev-iL    schedule 23.10.2017

MATLAB - Проверка типа переменных

class () работает точно так же, как оператор typeof в JavaScript.

Чтобы получить более подробную информацию о переменных, вы можете использовать команду whos или функцию whos ().

Вот пример кода, выполняемого в командном окне MATLAB R2017a.

>> % Define a number
>> num = 67

num =

    67

>> % Get type of variable num
>> class(num)

ans =

    'double'

>> % Define character vector
>> myName = 'Rishikesh Agrawani'

myName =

    'Rishikesh Agrwani'

>> % Check type of myName
>> class(myName)

ans =

    'char'

>> % Define a cell array
>> cellArr = {'This ', 'is ', 'a ', 'big chance to learn ', 'MATLAB.'}; % Cell array
>> 
>> class(cellArr)

ans =

    'cell'

>> % Get more details including type
>> whos num
  Name      Size            Bytes  Class     Attributes

  num       1x1                 8  double              

>> whos myName
  Name        Size            Bytes  Class    Attributes

  myName      1x17               34  char               

>> whos cellArr
  Name         Size            Bytes  Class    Attributes

  cellArr      1x5               634  cell               

>> % Another way to use whos i.e using whos(char_vector)
>> whos('cellArr')
  Name         Size            Bytes  Class    Attributes

  cellArr      1x5               634  cell               

>> whos('num')
  Name      Size            Bytes  Class     Attributes

  num       1x1                 8  double              

>> whos('myName')
  Name        Size            Bytes  Class    Attributes

  myName      1x17               34  char               

>> 
person hygull    schedule 10.05.2018
comment
Это ничего не добавляет к принятому в настоящее время ответу. - person rayryeng; 31.05.2018