似乎GNU Smalltalk中的inheritsFrom:方法对于作为参数发送给它的每个未定义的类名返回true。这可能会使程序很难调试,恕我直言。在Behavior类中查看此代码,它看起来像这样:
inheritsFrom: aClass [
"Returns true if aClass is a superclass of the receiver"
<category: 'testing the class hierarchy'>
| sc |
aClass isNil ifTrue: [^true].
sc := self.
[sc := sc superclass.
sc isNil] whileFalse: [sc == aClass ifTrue: [^true]].
^false
]
行aClass是否ifTrue:[^ true]是罪魁祸首,但我正在寻找一个合理的理由,就像它以这种方式编码一样。 (顺便说一句,我是Smalltalk世界的新手,并且正在努力学习。)
感谢。
答案 0 :(得分:3)
这与异常无关,而与未定义的变量无关。在GNU Smalltalk的REPL中,或者在图形环境的Transcript或Workspace中,未定义的变量都是零 - 例如,这在Ruby中并没有太大的不同。
所以你实际上是在做“Object inheritsFrom:nil”,这是真的。我不知道吱吱声是假的;实际上,这将偏离蓝皮书。
在一个方法中,你会得到一个“变量fooobaar undefined”编译时错误。
答案 1 :(得分:2)