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