【发布时间】:2020-10-08 07:15:28
【问题描述】:
如何仅当 env 变量为“true”时才实例化 ActorRef?我了解了 Option 和 Some 的使用,但我无法实现该构造。
【问题讨论】:
标签: scala environment-variables actor option
如何仅当 env 变量为“true”时才实例化 ActorRef?我了解了 Option 和 Some 的使用,但我无法实现该构造。
【问题讨论】:
标签: scala environment-variables actor option
要获取环境变量作为选项,您可以使用以下内容:
val maybeVar = Option(System.getenv("YOUR_VAR"))
System.getenv("YOUR_VAR") 可以返回null,但Option.apply 将其转换为None。
另一方面,您不实例化ActorRef,您通过以下方式获得这些引用:
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()))
}
【讨论】:
maybeActorRef 的类型是 Option[ActorRef],在最后一个 sn-p 中您可以准确地看到您想要的行为:如果 YOUR_VAR 在 env 变量中并且其值为true 然后 maybeActorRef 是 Some(ActorRef) 如果不存在或它有任何其他值,那么它是 None (Option.empty)。