これは、そのPropsために作られています。使用する利点は、引数なしのコンストラクターの使用に制限されるのではなく、実行時にProps必要なパラメーターをProcessorコンストラクターに渡すことができることです。
注意すべきことの 1 つは、名前による引数Propsを取ることです。そのため、実際にはその時点で は作成されません。toを渡すと作成されます。creatorProps(new TestActor)TestActorPropsactorOf()
Actors を のサブタイプに制限するには、 のサブタイプ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)
^