Scala 参与者使用:val vs lazy val vs normal方法调用进行spawing
请看下面的代码,并解释在akka actor系统中生成actor的不同方法之间的差异。哪一个是有效的,为什么Scala 参与者使用:val vs lazy val vs normal方法调用进行spawing,scala,akka,actor,Scala,Akka,Actor,请看下面的代码,并解释在akka actor系统中生成actor的不同方法之间的差异。哪一个是有效的,为什么 Class Parent extends Actor{ def createChild(props:Props,name:String)={ context.actorOf(props,name) } val type1=createChild(ChildActor.props,"Child") lazy val type2=createC
Class Parent extends Actor{
def createChild(props:Props,name:String)={
context.actorOf(props,name)
}
val type1=createChild(ChildActor.props,"Child")
lazy val type2=createChild(ChildActor.props,"Child")
def receive={
case x =>
type1 !"someMessage"
type2 ! "someMessage"
createChild(ChildActor.props,"Child") ! "someMessage
}
}
提前谢谢我想你应该避免为一个
演员
做懒惰的val
。原因是在大多数情况下,您可能希望通过ActorSelection
访问您的actor,而不是通过ActorRef
。在使用ActorSelection
的情况下,lazy val actorRef
将永远不会被实际创建,因此您的参与者将不存在。@SarveshKumarSingh是不是上述解释对val也有效?val
和lazy val
之间的区别在于val
实际上是在那里创建的但是,只有在对它们执行非惰性
操作时,才会创建惰性val
,并且运行时不能再延迟它们的创建ActorSelection
是一种使用Actor
地址(故障恢复时保持不变)而不是短暂的ActorRef
来获取Actor
句柄的方法。因此,您可能最终没有对该惰性ActorRef
执行非惰性
操作,因此您的参与者可能永远不会真正被创建。您的ActorSelection
将继续无任何结果。@SarveshKumarSingh感谢您解释差异。让我重新表述我的问题。它是这样的:何时何地我们可以使用val来创建一个actor,何时何地我们可以使用When-to-us方法来创建一个actor。我认为您应该避免参与者的惰性val
。原因是在大多数情况下,您可能希望通过ActorSelection
访问您的actor,而不是通过ActorRef
。在使用ActorSelection
的情况下,lazy val actorRef
将永远不会被实际创建,因此您的参与者将不存在。@SarveshKumarSingh是不是上述解释对val也有效?val
和lazy val
之间的区别在于val
实际上是在那里创建的但是,只有在对它们执行非惰性
操作时,才会创建惰性val
,并且运行时不能再延迟它们的创建ActorSelection
是一种使用Actor
地址(故障恢复时保持不变)而不是短暂的ActorRef
来获取Actor
句柄的方法。因此,您可能最终没有对该惰性ActorRef
执行非惰性
操作,因此您的参与者可能永远不会真正被创建。您的ActorSelection
将继续无任何结果。@SarveshKumarSingh感谢您解释差异。让我重新表述我的问题。它是这样的:何时何地可以使用val创建一个actor,何时使用When-to-us方法创建一个actor。