【问题标题】:Use of Option and Some in Scala with actors [closed]在 Scala 中与演员一起使用 Option 和 Some [关闭]
【发布时间】:2020-10-08 07:15:28
【问题描述】:

如何仅当 env 变量为“true”时才实例化 ActorRef?我了解了 Option 和 Some 的使用,但我无法实现该构造。

【问题讨论】:

    标签: scala environment-variables actor option


    【解决方案1】:

    要获取环境变量作为选项,您可以使用以下内容:

    val maybeVar = Option(System.getenv("YOUR_VAR"))
    

    System.getenv("YOUR_VAR") 可以返回null,但Option.apply 将其转换为None

    另一方面,您不实例化ActorRef,您通过以下方式获得这些引用:

    1. 从消息中获取。
    2. 创建一个新演员。
    3. 使用本地引用,例如 self

    因此,例如,您可以根据选项值创建或不创建演员:

    val maybeActorRef = maybeVar.map(x => system.actorOf(Props(new ActorWithArgs(x)))) 
    

    如果要将变量的值用作布尔标志,可以将上面的代码更改为:

    val maybeActorRef = maybeVar.filter(_ == "true").map(x => system.actorOf(Props(new ActorWithArgs(x)))) 
    

    甚至:

    val maybeActorRef = maybeVar.collect {
      case "true" =>
       system.actorOf(Props(new Actor()))
    }
    

    【讨论】:

    • 非常感谢您的回答。我想使用类似 Option[ActorRef] 的东西。 myEnv 变量是布尔值,所以当它为“真”时,我想实例化一个 ActorRef,否则我的引用将为“空”
    • @RiccardoCalifano,maybeActorRef 的类型是 Option[ActorRef],在最后一个 sn-p 中您可以准确地看到您想要的行为:如果 YOUR_VAR 在 env 变量中并且其值为true 然后 maybeActorRefSome(ActorRef) 如果不存在或它有任何其他值,那么它是 None (Option.empty)。
    猜你喜欢
    • 1970-01-01
    • 2014-06-29
    • 2014-01-20
    • 2010-11-21
    • 2010-12-05
    • 1970-01-01
    • 2023-03-30
    • 2011-07-08
    • 1970-01-01
    相关资源
    最近更新 更多