如何检查其中一个超类是否包含具有特定名称的classVariable?

时间:2013-08-24 20:27:23

标签: smalltalk pharo squeak

我想编写一个检查所有超类列表的方法(allSuperclass方法),如果其中一个具有特定名称的classVariable,则返回'true'。如果他们都没有,它将返回false。 我该怎么做?

3 个答案:

答案 0 :(得分:3)

classVarNames是一个返回类变量名称集合的方法。

例如,如果您将此方法添加到 Behavior 类,则应该获得您要求的功能:

 superclassesHaveNoClassVar: name
    ^ self allSuperclasses noneSatisfy: [:class |
        class classVarNames includes: name]

没什么特别的。只需选择allSuperclasses,然后检查其includes中是否有name所需的变量classVarNames

答案 1 :(得分:0)

发送:

superclass allClassVarNames includes: #AClassVariableName

到有问题的班级。 如果您想要一个单独的方法,可以像Uko建议的那样,在allClassVarNames协议的Behavior旁边放置它:

superclassesIncludeClassVariable: aSymbol
   ^ self superclass allClassVarNames includes: aSymbol

答案 2 :(得分:0)

在Squeak中,Behavior thatClassDefinesClassVar中有以下方法:
您可以这样使用它:

^(MyClass whichClassDefinesClassVar: #ThisVariableName) notNil