Jak czytać zmienne środowiskowe w Scali

156

W Javie odczyt zmiennych środowiskowych odbywa się za pomocą System.getenv().

Czy jest na to sposób w Scali?

żarówka letnia
źródło

Odpowiedzi:

231

Od Scala 2.9 możesz użyć sys.envdo 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.

paradygmatyczny
źródło
95
Prawdopodobnie lepszą praktyką jest użycie, sys.env.get("VARIABLE")które da Option[String]zamiast zgłosić błąd, jeśli brakuje tej zmiennej.
Cristian Vrabie
4
@CristianVrabie W większości przypadków też wolałbym. Ale sys.envto tylko plik Map. Możesz dowolną metodę, która jest dla Ciebie odpowiednia.
paradygmatyczny
3
sys.env.getOrElse("VARIABLE", "default value")był również pomocny w moim przypadku, gdy zmienna środowiskowa nie została zdefiniowana.
Josh Peak
131

Jest obiekt:

scala.util.Properties

zawiera zbiór metod, których można użyć do uzyskania informacji o środowisku, w tym

scala.util.Properties.envOrElse("HOME", "/myhome" )
andy
źródło
3
Wolałbym również właściwości. Pozwala pobierać opcje i ma nazwy powszechnie używanych właściwości.
ppopoff
25

Ta sama droga:

scala> System.getenv("HOME")
res0: java.lang.String = /Users/dhg
dhg
źródło
Teraz, gdy używam Scali na co dzień, muszę przenieść zaakceptowaną odpowiedź do odpowiedzi @ paradigmatic. Używa interfejsu API Scala i jeśli jest używany zgodnie z sugestią w komentarzach, może zwrócić Option.
letnia żarówka
11

Używając bezpośrednio wartości domyślnej z getOrElseover the sys.envMap ( val myenv: Map[String, String] = sys.env):

sys.env.getOrElse(envVariable, defaultValue)

Otrzymasz zawartość envVariablelub, jeśli nie istnieje, plik defaultValue.

victe
źródło
0

Aby wydrukować wszystkie zmienne środowiskowe, możesz użyć

System.getenv.forEach((name, value) => println(s"$name: $value"))
Matthias Braun
źródło
1
error: missing parameter typena argumentach, jeśli po prostu skopiujesz i wkleisz to.
thundergolfer
@thundergolfer: Obecnie nie mam zainstalowanej Scali na moim komputerze. Czy wiesz, czego brakuje?
Matthias Braun
Po zmianie parametrów na (name: String, value: String)otrzymuję error: type mismatch; found : (String, String) => Unit required: java.util.function.BiConsumer[_ >: String, _ >: String].
Roland Weber
1
Oto coś, co działa, ale wymaga importu: alvinalexander.com/scala/…
Roland Weber