2009-02-23 2 views

ответ

209

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

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

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

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

23

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

38

Другая связанная функция - 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 
+1

Функция [ВОЗ] (http://www.mathworks.de/de/help/matlab/ref/who.html) не перечисляет размер переменных. Из-за этого он намного быстрее, если ваше рабочее пространство переполнено. – JaBe

3

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

Смежные вопросы