Scala 参与者使用:val vs lazy val vs normal方法调用进行spawing

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

请看下面的代码,并解释在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=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。