我在下一页中读到,使用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))
}
答案 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))
}