3

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

4

3 回答 3

3

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

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

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

没什么特别的。只需allSuperclasses检查并检查它们是否都不是所需的includes变量。nameclassVarNames

于 2013-08-25T03:45:43.200 回答
0

只需发送:

superclass allClassVarNames includes: #AClassVariableName

到有问题的班级。如果你想要一个单独的方法,你可以按照 Uko 的建议将它allClassVarNames放在以下协议中Behavior

superclassesIncludeClassVariable: aSymbol
   ^ self superclass allClassVarNames includes: aSymbol
于 2013-08-25T09:48:59.217 回答
0

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

^(MyClass whichClassDefinesClassVar: #ThisVariableName) notNil
于 2013-09-01T13:30:40.253 回答