是否支持在Props中使用AnyVal(classOf [ValueActor],args ...)?

时间:2017-04-30 00:15:13

标签: scala akka

我在下一页中读到,使用Props(classOf[ValueActor], args...)创建工作人员不支持AnyVal。但是,如果我通过Int,那么它的效果非常好。 Int也不是AnyVal

http://doc.akka.io/docs/akka/current/scala/actors.html#Edge_cases

import akka.actor.{Actor, Props}
case class MyValueClass(v: Int) extends AnyVal

object TestAnyVal  extends  App {
  class IntActor(value: Int) extends Actor {
    def receive = {
      case multiplier: Long => sender() ! (value * multiplier)
    }
  }
  class ValueActor(value: Int) extends Actor {
    def receive = {
      case multiplier: Long => sender() ! (value * multiplier)
    }
  }
  val valueClassProp1 = Props(classOf[IntActor], 5);
  val valueClassProp = Props(classOf[ValueActor], MyValueClass(5))
}

1 个答案:

答案 0 :(得分:2)

对于Int,类型在运行时和编译时都是Int。但是,对于MyValueClass,类型在编译时为MyValueClass,但在运行时为Int(请参阅http://docs.scala-lang.org/overviews/core/value-classes.html)。

我相信这会奏效:

  class ValueActor(value: MyValueClass) extends Actor {
    ...
  }

  val valueClassProp = Props(new ValueActor(MyValueClass(5)))

或,在recommended best practices之后:

  class ValueActor(value: MyValueClass) extends Actor {
    ...
  }
  object ValueActor {
    def props(value: MyValueClass) = Props(new ValueActor(value))  
  }