Проверьте, является ли объект экземпляром данного класса или его подкласса

Есть ли простой способ сделать это в Smalltalk? Я на 80% уверен, что есть какой-то метод, но не могу найти его где-нибудь.

Я знаю, что могу использовать

(instance class = SomeClass) ifTrue:

И я знаю, что могу использовать superclass и т.д., но я надеюсь, что есть что-то встроенное:)

Ответ 1

Чтобы проверить, является ли anObject экземпляром aClass:

(anObject isMemberOf: aClass)

Чтобы проверить, является ли это экземпляром aClass или одного из его подклассов:

(anObject isKindOf: aClass)

Ответ 2

Вы правы, чтобы проверить точный класс, который вы используете (используя вместо него идентификатор):

класс экземпляра == SomeClass ifTrue: []

Полезно также isKindOf:, который проверяет, является ли экземпляр классом или подклассом данного класса:

(instance isKindOf: SomeClass) ifTrue: []

Самый красивый и самый элегантный - написать метод тестирования в классах суперкласса и одноранговых сетей, а затем использовать его как:

instance isSomeClass ifTrue: []