Я хочу написать метод, который проверяет список всех суперклассов (метод allSuperclass) и возвращает «истину», если один из них имеет classVariable с определенным именем. Если ни у кого из них нет, он вернет false. Как мне это сделать?
Как проверить, содержит ли один из суперклассов classVariable с определенным именем?
Ответы (3)
classVarNames
— это метод, который возвращает коллекцию имен переменных класса.
Например, если вы добавите этот метод в класс Behavior, вы должны получить требуемую функциональность:
superclassesHaveNoClassVar: name
^ self allSuperclasses noneSatisfy: [:class |
class classVarNames includes: name]
Ничего особенного. Просто возьмите allSuperclasses
и проверьте, нет ли среди них includes
нужной переменной name
classVarNames
.
person
Uko
schedule
25.08.2013
Просто отправь:
superclass allClassVarNames includes: #AClassVariableName
к рассматриваемому классу. Если вам нужен отдельный метод для этого, вы можете поместить его, как предложил Уко, рядом с allClassVarNames
в протоколе Behavior
:
superclassesIncludeClassVariable: aSymbol
^ self superclass allClassVarNames includes: aSymbol
person
MartinW
schedule
25.08.2013
В Squeak есть следующий метод Behavior, который ClassDefinesClassVar:
Вы можете использовать его следующим образом:
^(MyClass whichClassDefinesClassVar: #ThisVariableName) notNil
person
aka.nice
schedule
01.09.2013