Smalltalk 检查对象是否是给定类或其子类的实例

Smalltalk 检查对象是否是给定类或其子类的实例,smalltalk,pharo,Smalltalk,Pharo,在Smalltalk中有没有一种简单的方法可以做到这一点?我80%确信有某种方法,但在任何地方都找不到 我知道我可以用 (instance class = SomeClass) ifTrue: 我知道我可以使用超类等。。。但是我希望有内置的东西:)来测试一个对象是否是aClass的实例: (anObject isMemberOf: aClass) 要测试它是aClass的实例还是它的子类之一,请执行以下操作: (anObject isKindOf: aClass) 您是对的,检查您使用的确

在Smalltalk中有没有一种简单的方法可以做到这一点?我80%确信有某种方法,但在任何地方都找不到

我知道我可以用

(instance class = SomeClass) ifTrue:

我知道我可以使用
超类
等。。。但是我希望有内置的东西:)

来测试一个对象是否是aClass的实例:

(anObject isMemberOf: aClass)
要测试它是aClass的实例还是它的子类之一,请执行以下操作:

(anObject isKindOf: aClass)

您是对的,检查您使用的确切类(改用identity):

实例类==SomeClass ifTrue:[]

有用的还有
isKindOf:
,它测试实例是否是给定类的类或子类:

(实例有点像:SomeClass)如果真的是:[]


最好也是最优雅的方法是在超类和对等类中编写一个测试方法,然后像这样使用它:

实例isSomeClass ifTrue:[]


最美好、最优雅的莫过于不问、不说,例如:而不是:object is something if真的:【做某事】用法:object dosomething我同意伊戈尔的观点。此外,“最美好和最优雅”在旁观者的眼中。isInteger和friends所做的肯定更快,因为它们是一条立即返回true/false的消息,而isKindOf必须循环类层次结构。对某些人来说,缺点是必须向返回false的对象添加isSomeClass方法。