pharo 2.0 smalltalk中标记和未标记的类

时间:2014-08-19 10:52:16

标签: smalltalk pharo

我需要在pharo中实现标记为子类的消息,它就像子类一样工作,但我需要创建的类以某种方式标记,例如我尝试在创建它之后添加一个唯一的实例变量,但它只是不起作用,也许我把它添加到错误的地方。 要求是:

  1. 此标记类的每个子类也应标记,即使它 是通过子类(not markedSubclass)创建的。
  2. 除此之外,标记的类应该像普通类一样运行。 任何帮助将不胜感激。
  3. 示例:

    User markedSubclass: #MarkedUser
    User subClass: #UnmarkedUser
    MarkedUser subclass: #MarkerUser2
    

    我需要以某种方式知道MarkedUser和UnmarkedUser都是标记的类。 我最近想到的是将方法“isMarked”添加到Class类中,这一切都是这样 类会有它,每个类都会相应地覆盖它,所以如果我们写

    User class isMarked.
    

    它将返回false,但如果我们写:

    MarkedUser class isMarked.
    MarkedUser2 class isMarked.
    

    两者都会返回true。 但是我可以在哪里添加此方法?如何让类在运行时覆盖该方法?

1 个答案:

答案 0 :(得分:1)

在您的User课程中添加类似以下的课程方法:

markedSubclass: className
    | subclass |
    subclass := self subclass: className asSymbol.
    subclass class compile: 'isMarked', String cr, String tab, ' ^ true'.
    ^ subclass

然后在工作区中尝试:

User markedSubclass: 'MyMarkedSubclass'

相应地添加#unmarkedSubclass:类方法。

然后,您可以覆盖#subclass:类中的常规User方法,以设置与接收方相同的标记。