GNU 스몰 토크의 inheritsFrom : 메소드는 매개 변수로 전달 된 정의되지 않은 모든 클래스 이름에 대해 true를 반환합니다. 이렇게하면 프로그램을 디버깅하기가 매우 어려울 수 있습니다. 에 GPRS 클래스에서이에 대한 코드를 보면, 그것은 다음과 같습니다예 : Object inheritsFrom : fooobaar가 Smalltalk에서 true를 반환합니까?
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 isNil ifTrue을 : [^ TRUE] 범인이지만, 그것이 방식으로 나는 제정신 이유를 찾고 있어요 이 방법으로 코딩. (저는 스몰 토크의 세계에 처음 접하고 배우려고합니다.)
고마워요.
Hum, Neil의 대답 (직접적으로 말할 수는 없지만)은 Object가 모든 것의 수퍼 클래스가 아니라는 점에서 잘못되었습니다. 어떤면에서 nil은 모든 것의 수퍼 클래스입니다. 예를 들어 GNU 스몰 토크의 Autoload 클래스는 Object가 아니라 nil에서 직접 상속받습니다. 다른 많은 예가 있습니다. –