У Java змінні середовища читання виконується за допомогою System.getenv()
.
Чи є спосіб це зробити в Scala?
У Java змінні середовища читання виконується за допомогою System.getenv()
.
Чи є спосіб це зробити в Scala?
Відповіді:
Оскільки 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
це лише a Map
. Ви можете будь-який спосіб, який підходить вам.
sys.env.getOrElse("VARIABLE", "default value")
також було корисно в моєму випадку, коли змінна середовище може бути не визначена.
Є об’єкт:
scala.util.Properties
тут є набір методів, які можна використовувати для отримання інформації про навколишнє середовище, в тому числі
scala.util.Properties.envOrElse("HOME", "/myhome" )
Точно так же:
scala> System.getenv("HOME")
res0: java.lang.String = /Users/dhg
Якщо використовується бібліотека конфігурації Lightbend (за замовчуванням у Play2 та Akka), ви можете використовувати
foo = "default value"
foo = ${?VAR_NAME}
синтаксис для заміщення foo, якщо існує змінна середовище VAR_NAME. Детальніше на https://github.com/typesafehub/config#optional-system-or-env-variable-overrides
Щоб надрукувати всі змінні середовища, ви можете використовувати
System.getenv.forEach((name, value) => println(s"$name: $value"))
error: missing parameter type
на аргументи, якщо ви просто скопіюйте це вставити.
(name: String, value: String)
, я отримую error: type mismatch; found : (String, String) => Unit required: java.util.function.BiConsumer[_ >: String, _ >: String]
.
sys.env.get("VARIABLE")
якаOption[String]
скоріше видасть помилку, ніж помилка, якщо ця змінна відсутня.