Es scheint, dass die Methode inheritesFrom: in GNU Smalltalk true für jeden undefinierten Klassennamen zurückgibt, der als Parameter an sie gesendet wird. Dies macht ein Programm sehr schwer zu debuggen, IMHO. Mit Blick auf den Code für diese in der Behavior Klasse, sieht es wie folgt aus:Warum tut z.B. Object inheritsFrom: fooobar gibt in Smalltalk true zurück?
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
]
Die Linie aClass isNil ifTrue: [^ true] ist der Schuldige, aber ich bin auf der Suche nach einem vernünftigen Grund an, wie es war so codiert. (Ich bin übrigens neu in der Smalltalk-Welt und versuche zu lernen.)
Danke.
Hum, Neils Antwort (die ich nicht direkt kommentieren kann) ist falsch in diesem Objekt ist nicht die Oberklasse von allem. In gewissem Sinne ist nil die Oberklasse von allem - die Autoload-Klasse von GNU Smalltalk zum Beispiel erbt direkt von nil, nicht von Object, und es gibt viele andere Beispiele. –