これは、そのProps
ために作られています。使用する利点は、引数なしのコンストラクターの使用に制限されるのではなく、実行時にProps
必要なパラメーターをProcessor
コンストラクターに渡すことができることです。
注意すべきことの 1 つは、名前による引数Props
を取ることです。そのため、実際にはその時点で は作成されません。toを渡すと作成されます。creator
Props(new TestActor)
TestActor
Props
actorOf()
Actor
s を のサブタイプに制限するには、 のサブタイプProcessor
を作成できますProps
。
例えば:
trait Processor extends Actor
class MyProps(creat: () ⇒ Processor) extends Props(creat)
object MyProps {
def apply(creator: ⇒ Processor): MyProps = new MyProps(() => creator)
}
クラスEvent
にはSeq[MyProps]
. サンプルテストは次のとおりです。
case class Event(
name: String,
channels: Seq[String],
processors: Seq[MyProps]
)
class TestActor(bar: String) extends Processor {
def receive = {
case msg @ _ => println(bar + " " + msg)
}
}
object SeqProps extends App {
override def main(args: Array[String]) {
val system = ActorSystem()
val event = new Event("test", Seq("chan1", "chan2", "chan3"),
Seq(MyProps(new TestActor("baz")),
MyProps(new TestActor("barz"))))
event.processors.foreach { proc =>
system.actorOf(proc) ! "go!"
}
system.shutdown()
}
}
Processor
非toを渡そうとMyProps()
すると、コンパイル時に失敗します。
scala> class NotProcessor extends Actor {
| def receive = emptyBehavior
| }
defined class NotProcessor
scala> MyProps(new NotProcessor)
<console>:15: error: type mismatch;
found : NotProcessor
required: Processor
MyProps(new NotProcessor)
^