Як читати змінні середовища в Scala


Відповіді:


232

Оскільки Scala 2.9 ви можете використовувати sys.envдля того ж ефекту:

scala> sys.env("HOME")
res0: String = /home/paradigmatic

Я думаю, що приємно використовувати Scala API замість Java. Наразі існує декілька проектів по компіляції Scala на інші платформи, ніж JVM (.NET, javascript, native тощо). Зменшення залежностей від Java API зробить ваш код більш портативним.


96
Це, мабуть, краща практика використання, sys.env.get("VARIABLE")яка Option[String]скоріше видасть помилку, ніж помилка, якщо ця змінна відсутня.
Крістіан Врабі

4
@CristianVrabie Я б вважав за краще і в більшості випадків. Але sys.envце лише a Map. Ви можете будь-який спосіб, який підходить вам.
парадигматичний

3
sys.env.getOrElse("VARIABLE", "default value")також було корисно в моєму випадку, коли змінна середовище може бути не визначена.
Джош Пік

131

Є об’єкт:

scala.util.Properties

тут є набір методів, які можна використовувати для отримання інформації про навколишнє середовище, в тому числі

scala.util.Properties.envOrElse("HOME", "/myhome" )

3
Я також віддав перевагу "Властивості". Це дозволяє вибирати необов’язкові та має назви загальновживаних властивостей.
ppopoff

25

Точно так же:

scala> System.getenv("HOME")
res0: java.lang.String = /Users/dhg

Тепер, коли я щодня використовую Scala, я повинен перемістити прийняту відповідь на відповідь @ paradigmatic. Він використовує API Scala і, якщо використовувати його, як запропоновано в коментарях, може повернути Варіант.
літній бульба

11

Використання безпосередньо за замовчуванням з getOrElseпо sys.envкарті ( val myenv: Map[String, String] = sys.env):

sys.env.getOrElse(envVariable, defaultValue)

Ви отримуєте зміст , envVariableабо, якщо він не існує, то defaultValue.



0

Щоб надрукувати всі змінні середовища, ви можете використовувати

System.getenv.forEach((name, value) => println(s"$name: $value"))

1
error: missing parameter typeна аргументи, якщо ви просто скопіюйте це вставити.
громовержець

@thundergolfer: Наразі у мене на машині не встановлено Scala. Ви зрозуміли, чого не вистачає?
Маттіас Браун

Після зміни параметрів на (name: String, value: String), я отримую error: type mismatch; found : (String, String) => Unit required: java.util.function.BiConsumer[_ >: String, _ >: String].
Роланд Вебер

1
Ось те, що працює, але вимагає імпорту: alvinalexander.com/scala/…
Roland Weber
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.