Scala演员发送消息给超级

时间:2011-12-13 07:19:07

标签: scala actor

我正在尝试创建一个使用actor的基类,有点像这样:

import scala.actors.Actor


case class FooBar()


class ParentActor extends Actor {



def act {

  loop {

    react {

      case  f: FooBar =>

        println("Parent Foo")

      case _ =>

        println("Parent something")

    }

  }

}

}

然后我希望子课看起来像这样:

class ChildActor extends ParentActor {

  override def act {

    loop {

      react {

        case i: Integer =>

          println("Child int")

        case default =>

          println("Child Base")
          super ! default


      }

    }


  }


}

我的最终目标是在父actor类中提供一个基本功能,如果子actor没有对该case类做出反应,将执行该功能。我试着做了

super ! Message

但这会引发错误:

  

''预期但找到了标识符。

如何将ChildActor中的消息传递给基本ParentActor act函数?

1 个答案:

答案 0 :(得分:1)

处理收到的消息的代码是PartialFunction,它被传递给react方法 - 换句话说就是那个case / block。不可能直接调用在其他方法(包括超类'方法)中声明的任何闭包,除非该方法以某种方式向您传递对闭包实例的引用。并且应该避免通过继承进行代码重用。

由于案例块是PartialFunction,因此可以使用orElse方法组合多个此类块。这样,您可以组合多个案例块,以便在没有匹配的情况下它将回退到下一个案例块。

您不需要继承来组合处理程序 - 只需将“父处理程序”作为函数公开,并在调用react之前组合它们。或者为了减少样板并使ChildActor不知道父代码中的代码,覆盖ParentActor中的react方法并在将处理程序组合到super.react之前对其进行编写。

相关问题