【发布时间】:2012-04-17 08:16:37
【问题描述】:
在 Java 中,读取环境变量是通过 System.getenv() 完成的。
有没有办法在 Scala 中做到这一点?
【问题讨论】:
标签: scala environment-variables
在 Java 中,读取环境变量是通过 System.getenv() 完成的。
有没有办法在 Scala 中做到这一点?
【问题讨论】:
标签: scala environment-variables
同样的方式:
scala> System.getenv("HOME")
res0: java.lang.String = /Users/dhg
【讨论】:
从 Scala 2.9 开始,您可以使用 sys.env 获得相同的效果:
scala> sys.env("HOME")
res0: String = /home/paradigmatic
我认为使用 Scala API 代替 Java 会很好。目前有几个项目可以将 Scala 编译到 JVM 以外的其他平台(.NET、javascript、native 等)。减少对 Java API 的依赖,将使您的代码更具可移植性。
【讨论】:
sys.env.get("VARIABLE") 可能是更好的做法,它会为您提供Option[String],而不是在缺少该变量时抛出错误。
sys.env 只是一个Map。您可以选择适合您的任何方法。
sys.env.getOrElse("VARIABLE", "default value") 在可能未定义环境变量的情况下也很有帮助。
有一个对象:
scala.util.Properties
这有一组可用于获取环境信息的方法,包括
scala.util.Properties.envOrElse("HOME", "/myhome" )
【讨论】:
如果使用 Lightbend 的配置库(默认在 Play2 和 Akka 中)那么你可以使用
foo = "default value"
foo = ${?VAR_NAME}
如果存在环境变量 VAR_NAME,则覆盖 foo 的语法。 更多详情https://github.com/typesafehub/config#optional-system-or-env-variable-overrides
【讨论】:
要打印所有环境变量,可以使用
System.getenv.forEach((name, value) => println(s"$name: $value"))
【讨论】:
error: missing parameter type 在 args 上,如果你只是复制粘贴的话。
(name: String, value: String)后,我得到error: type mismatch; found : (String, String) => Unit required: java.util.function.BiConsumer[_ >: String, _ >: String]。
在 sys.env 映射 (val myenv: Map[String, String] = sys.env) 上直接使用带有 getOrElse 的默认值:
sys.env.getOrElse(envVariable, defaultValue)
您将获得envVariable 的内容,如果不存在,则获得defaultValue。
【讨论】: