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

Uko*_*Uko 13 smalltalk pharo

在Smalltalk中有一个简单的方法吗?我80%确定有一些方法,但无法在任何地方找到它.

我知道我可以用

(instance class = SomeClass) ifTrue:
Run Code Online (Sandbox Code Playgroud)

我知道我可以使用superclass等...但我希望有内置的东西:)

aka*_*ice 20

要测试anObject是否是aClass的实例:

(anObject isMemberOf: aClass)
Run Code Online (Sandbox Code Playgroud)

要测试它是aClass的实例还是其中一个子类:

(anObject isKindOf: aClass)
Run Code Online (Sandbox Code Playgroud)


Jan*_*šek 5

你是对的,检查你使用的确切类(使用身份代替):

instance class == SomeClass ifTrue:[]

有用的还isKindOf:可以测试实例是否为给定类的类或子类:

(实例isKindOf:SomeClass)ifTrue:[]

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

实例isSomeClass ifTrue:[]

  • 我同意伊戈尔的观点.此外,"最好,最优雅"是旁观者的眼睛.WhatInteger和朋友做的肯定是*更快*因为它们是单个消息发送,立即返回true/false而不是isKindOf:它必须循环类层次结构.某些人的缺点是你必须向Object添加一个返回false的isSomeClass方法. (2认同)