如何在 Scala 中读取环境变量
Posted
技术标签:
【中文标题】如何在 Scala 中读取环境变量【英文标题】:How to read environment variables in Scala 【发布时间】:2012-04-17 08:16:37 【问题描述】:在 Java 中,读取环境变量是通过 System.getenv()
完成的。
有没有办法在 Scala 中做到这一点?
【问题讨论】:
【参考方案1】:同样的方式:
scala> System.getenv("HOME")
res0: java.lang.String = /Users/dhg
【讨论】:
现在我每天都在使用 Scala,我必须将接受的答案移至 @paradigmatic 的答案。它使用 Scala API,如果按照 cmets 中的建议使用,可以返回一个选项。【参考方案2】:从 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]
,而不是在缺少该变量时抛出错误。
@CristianVrabie 在大多数情况下,我也更喜欢它。但是sys.env
只是一个Map
。您可以选择适合您的任何方法。
sys.env.getOrElse("VARIABLE", "default value")
在可能未定义环境变量的情况下也很有帮助。【参考方案3】:
有一个对象:
scala.util.Properties
这有一组可用于获取环境信息的方法,包括
scala.util.Properties.envOrElse("HOME", "/myhome" )
【讨论】:
我也更喜欢属性。它允许检索 Optionals,并具有常用属性的名称。【参考方案4】:如果使用 Lightbend 的配置库(默认在 Play2 和 Akka 中)那么你可以使用
foo = "default value"
foo = $?VAR_NAME
如果存在环境变量 VAR_NAME,则覆盖 foo 的语法。 更多详情https://github.com/typesafehub/config#optional-system-or-env-variable-overrides
【讨论】:
【参考方案5】:要打印所有环境变量,可以使用
System.getenv.forEach((name, value) => println(s"$name: $value"))
【讨论】:
error: missing parameter type
在 args 上,如果你只是复制粘贴的话。
@thundergolfer:我目前没有在我的机器上安装 Scala。你弄清楚缺少什么了吗?
将参数更改为(name: String, value: String)
后,我得到error: type mismatch; found : (String, String) => Unit required: java.util.function.BiConsumer[_ >: String, _ >: String]
。
以下是可行的,但需要导入:alvinalexander.com/scala/…【参考方案6】:
在 sys.env
映射 (val myenv: Map[String, String] = sys.env
) 上直接使用带有 getOrElse
的默认值:
sys.env.getOrElse(envVariable, defaultValue)
您将获得envVariable
的内容,如果不存在,则获得defaultValue
。
【讨论】:
以上是关于如何在 Scala 中读取环境变量的主要内容,如果未能解决你的问题,请参考以下文章