MATLAB มีฟังก์ชัน / โอเปอเรเตอร์ที่ระบุประเภทของตัวแปร (คล้ายกับtypeof
โอเปอเรเตอร์ใน JavaScript) หรือไม่?
MATLAB มีฟังก์ชัน / โอเปอเรเตอร์ที่ระบุประเภทของตัวแปร (คล้ายกับtypeof
โอเปอเรเตอร์ใน JavaScript) หรือไม่?
คำตอบ:
ใช้class
ฟังก์ชั่น
>> b = 2
b =
2
>> a = 'Hi'
a =
Hi
>> class(b)
ans =
double
>> class(a)
ans =
char
class()
ฟังก์ชั่นเทียบเท่า typeof()
นอกจากนี้คุณยังสามารถใช้isa()
เพื่อตรวจสอบว่าตัวแปรเป็นประเภทที่เฉพาะเจาะจง หากคุณต้องการที่จะเฉพาะเจาะจงมากยิ่งขึ้นคุณสามารถใช้ischar()
, isfloat()
, iscell()
ฯลฯ
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
ระวังเมื่อใช้isa
ฟังก์ชั่น สิ่งนี้จะเป็นจริงถ้าวัตถุของคุณเป็นประเภทที่ระบุหรือหนึ่งในคลาสย่อย คุณต้องใช้strcmp
กับclass
ฟังก์ชั่นเพื่อทดสอบว่าวัตถุนั้นเป็นชนิดนั้นโดยเฉพาะและไม่ใช่คลาสย่อย
เนื่องจากไม่มีใครพูดถึงมัน 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)
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
>>
if ( string(class(b)) == 'double' ) fprintf(1, 'b is double'); end