Bagaimana cara mendapatkan jenis variabel di MATLAB?

188

Apakah MATLAB memiliki fungsi / operator yang menunjukkan jenis variabel (mirip dengan typeofoperator dalam JavaScript)?

Dónal
sumber

Jawaban:

231

Gunakan classfungsinya

>> b = 2
b =
     2
>> a = 'Hi'
a =
Hi
>> class(b)
ans =
double
>> class(a)
ans =
char
Daniel LeCheminant
sumber
untuk persyaratan:if ( string(class(b)) == 'double' ) fprintf(1, 'b is double'); end
khaverim
70

class() fungsi adalah setara dengan typeof()

Anda juga dapat menggunakan isa()untuk memeriksa apakah suatu variabel adalah tipe tertentu. Jika Anda ingin menjadi lebih spesifik, Anda dapat menggunakan ischar(), isfloat(), iscell(), dll

Dima
sumber
44

Fungsi terkait lainnya adalah whos. Ini akan mencantumkan semua jenis informasi (dimensi, ukuran byte, tipe) untuk variabel di ruang kerja yang diberikan.

>> 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 
gnovice
sumber
1
Fungsi WHO tidak mencantumkan ukuran variabel. Karena itu jauh lebih cepat jika ruang kerja Anda penuh sesak.
JaBe
27

Hati-hati saat menggunakan isafungsi ini. Ini akan benar jika objek Anda adalah tipe yang ditentukan atau salah satu dari subkelasnya. Anda harus menggunakan strcmpdengan classfungsi untuk menguji apakah objek secara khusus tipe itu dan bukan subkelas.

Mike Katz
sumber
5

Karena tidak ada yang menyebutkannya, MATLAB juga memiliki metaclassfungsi, yang mengembalikan objek dengan berbagai bit informasi tentang entitas yang lewat. Inimeta.classObjek objek ini dapat berguna untuk pengujian warisan (melalui operator pembanding umum).

Sebagai contoh:

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

Kita dapat melihat bahwa class(someObj)itu setara dengan Namebidang hasil metaclass(someObj).

Setan
sumber
0

MATLAB - Memeriksa jenis variabel

class () persis bekerja seperti operator typeof Javascript .

Untuk mendapatkan rincian lebih lanjut tentang variabel yang dapat digunakan whos perintah atau () whos fungsi.

Berikut adalah contoh kode yang dieksekusi pada Command Window 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               

>> 
camar
sumber
3
Ini tidak menambahkan apa pun ke jawaban yang saat ini diterima.
rayryeng