我正在尝试编写一个接受并生成任何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视为对象,而不是类。我的错误。
答案 0 :(得分:2)
Props
需要Class
或ClassTag
才能创建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]
这样的东西不会起作用,因为那是一个实例,而不是一个类。