【问题标题】:Check if an object is an instance of a given class or of a subclass of it检查对象是给定类的实例还是它的子类
【发布时间】:2012-11-26 14:33:59
【问题描述】:

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

我知道我可以使用

(instance class = SomeClass) ifTrue:

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

【问题讨论】:

    标签: smalltalk pharo


    【解决方案1】:

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

    实例 class== SomeClass ifTrue: []

    Usefull 也是 isKindOf:,它测试实例是否是给定类的类或子类:

    (instance isKindOf: SomeClass) ifTrue: []

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

    instance isSomeClass ifTrue: []

    【讨论】:

    • 最好和最优雅的是不问,不告诉,例如:而不是:object isSomething ifTrue:[做某事]使用:object doSomething
    • 我同意伊戈尔的观点。而且,“最好最优雅”在旁观者的眼中。 isInteger 和朋友所做的绝对是更快,因为它们是立即返回真/假的单个消息发送,而 isKindOf: 必须循环类层次结构。对某些人来说,缺点是您必须向 Object 添加一个 isSomeClass 方法,该方法返回 false。
    【解决方案2】:

    测试一个Object是否是一个Class的实例:

    (anObject isMemberOf: aClass)
    

    测试它是aClass的实例还是它的子类之一:

    (anObject isKindOf: aClass)
    

    【讨论】:

      猜你喜欢
      • 2013-05-17
      • 2017-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-14
      • 2020-12-21
      • 2015-08-03
      相关资源
      最近更新 更多