今天和DYQ讨论命名结构体和匿名结构体的区别。以下代码是讨论结果。请愿意往下看的同学留意注释
大家直接拷贝到IDL编译器看吧。
Pro testStructure
; By Huxz, CUHK, 2009-6
;------------命名结构体--------------------------------------------------------------------------
; 定义结构体,相当于定义一个类。这也是为什么类的__Define过程也必须是一个命名结构体
a = {name1, a:1, b:'a'} ; 其实这些值对之后的实例化,是没有任何用处的。。。
; 将上面定义的类,实例化一个对象:B
b = {name1}
; 查看 B的内容
print, '回到纯真。。。'
help, b, /stru
; 什么?为啥结构体被初始化了?数值变成0,字符串变成'' 了?那是因为没有初始化:
; 再来一例,并给定初始值:2, 3
print, '初始化的效果。。。'
bb = {name1, 3, 'b'}
help, bb
; 总结:定义命名结构体其实和定义一个类是同一原理。
; 一个命名结构体,就是一个只有定义,只有初始化,而没有方法的类
;--------------------------------------------------------------------------------------------------
;------------匿名结构体--------------------------------------------------------------------------
print, '没有名字,无法实例化的匿名结构体。。。'
c = {a: 1, b: 'test'}
help, c, /stru
; 想实例化?没门。匿名结构体只能每次定义,不能一次定义,到处实例化。
; 最后,为什么说一个命名结构体就是一个类的原型?看看下一行代码的报错信息吧!
; 我们用实例化命名结构体的方法来实例化一个根本不存在的命名结构体,看会怎么样?
; 看到Attempt to call undefined procedure/function: 'FBC288__DEFINE'.没?
; 是不是很眼熟??? ^_^
print, '看看这个错误信息,是不是证明 初始化一个命名结构体,和初始化一个类是一个原理?'
d = {fbc288}
End