Làm thế nào để có được loại biến trong MATLAB?


188

MATLAB có hàm / toán tử chỉ ra loại biến (tương tự typeoftoán tử trong JavaScript) không?

Câu trả lời:


231

Sử dụng classchức năng

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

cho các điều kiện:if ( string(class(b)) == 'double' ) fprintf(1, 'b is double'); end
khaverim

70

class() chức năng tương đương với typeof()

Bạn cũng có thể sử dụng isa()để kiểm tra xem một biến có thuộc loại cụ thể không. Nếu bạn muốn được cụ thể hơn nữa, bạn có thể sử dụng ischar(), isfloat(), iscell()vv


44

Một chức năng liên quan khác là whos. Nó sẽ liệt kê tất cả các loại thông tin (kích thước, kích thước byte, loại) cho các biến trong một không gian làm việc nhất định.

>> 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
Hàm WHO không liệt kê kích thước của các biến. Do đó, nó sẽ nhanh hơn nhiều nếu không gian làm việc của bạn đông đúc.
JaBe

27

Cẩn thận khi sử dụng isachức năng. Điều này sẽ đúng nếu đối tượng của bạn thuộc loại được chỉ định hoặc một trong các lớp con của nó. Bạn phải sử dụng strcmpvới classhàm để kiểm tra xem đối tượng có thuộc loại đó không và không phải là lớp con.


5

Vì không ai đề cập đến nó, MATLAB cũng có metaclasschức năng trả về một đối tượng có nhiều thông tin khác nhau về thực thể được truyền vào. Các meta.classđối tượng này có thể hữu ích cho các thử nghiệm kế thừa (thông qua các toán tử so sánh phổ biến).

Ví dụ:

>> 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

Chúng ta có thể thấy rằng class(someObj)tương đương với Namelĩnh vực kết quả metaclass(someObj).


0

MATLAB - Kiểm tra loại biến

class () hoạt động chính xác như toán tử typeof của Javascript .

Để biết thêm chi tiết về các biến, bạn có thể sử dụng hàm whos hoặc hàm whos () .

Dưới đây là mã ví dụ được thực thi trên Cửa sổ lệnh của 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               

>> 

3
Điều này không thêm bất cứ điều gì vào câu trả lời hiện đang được chấp nhận.
rayryeng
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.