W Javie odczyt zmiennych środowiskowych odbywa się za pomocą System.getenv()
.
Czy jest na to sposób w Scali?
W Javie odczyt zmiennych środowiskowych odbywa się za pomocą System.getenv()
.
Czy jest na to sposób w Scali?
Odpowiedzi:
Od Scala 2.9 możesz użyć sys.env
do tego samego efektu:
scala> sys.env("HOME")
res0: String = /home/paradigmatic
Myślę, że fajnie jest używać API Scala zamiast Javy. Obecnie istnieje kilka projektów kompilacji Scali na platformy inne niż JVM (.NET, javascript, natywne itp.). Zmniejszenie zależności od Java API sprawi, że Twój kod będzie bardziej przenośny.
sys.env
to tylko plik Map
. Możesz dowolną metodę, która jest dla Ciebie odpowiednia.
sys.env.getOrElse("VARIABLE", "default value")
był również pomocny w moim przypadku, gdy zmienna środowiskowa nie została zdefiniowana.
Ta sama droga:
scala> System.getenv("HOME")
res0: java.lang.String = /Users/dhg
Jeśli używana jest biblioteka konfiguracji Lightbend (domyślnie w Play2 i Akka), możesz użyć
foo = "default value"
foo = ${?VAR_NAME}
składnię, aby przesłonić foo, jeśli istnieje zmienna środowiskowa VAR_NAME. Więcej szczegółów na https://github.com/typesafehub/config#optional-system-or-env-variable-overrides
Aby wydrukować wszystkie zmienne środowiskowe, możesz użyć
System.getenv.forEach((name, value) => println(s"$name: $value"))
error: missing parameter type
na argumentach, jeśli po prostu skopiujesz i wkleisz to.
(name: String, value: String)
otrzymuję error: type mismatch; found : (String, String) => Unit required: java.util.function.BiConsumer[_ >: String, _ >: String]
.
sys.env.get("VARIABLE")
które daOption[String]
zamiast zgłosić błąd, jeśli brakuje tej zmiennej.