产生类型的演员?

时间:2016-06-23 03:10:51

标签: scala akka

我正在尝试编写一个接受并生成任何Actor类的spawn函数。这就是我所拥有的:

object entities {
    val system = ActorSystem("Entities")

    def spawnEntity(entity : Actor) = {
        system.actorOf(Props[entity])
}

这里说它不知道什么类型的实体,这是可以理解的。不过,我也尝试了classOf(entity)entity.class,但这也无效。

如何生成像这样的Actors?欲望功能将类似于:

entities.spawnEntity(Bird)
entities.spawnEntity(Rabbit( /* params here * /)

鸟与兔是演员。

编辑:将Bird和Rabbit视为对象,而不是类。我的错误。

1 个答案:

答案 0 :(得分:2)

Props需要ClassClassTag才能创建Actor,但entity应该是{{1}的实例(当前代码编写)。你想要的是签名Actor

,您可以使用类型参数,这是您在entity: Class[_ <: Actor]的实施中尝试使用的。

spawnEntity

import scala.reflect.ClassTag def spawnEntity[Entity <: Actor: ClassTag] = system.actorOf(Props[Entity]) 现在是一个无参数的方法,有一个名为spawnEntity的类型参数,它必须是Entity的子类型(或上面的相同类型),其中一个{ {1}}可以由编译器生成。

用法:

Actor

使用ClassTag[Entity]这样的东西不会起作用,因为那是一个实例,而不是一个类。