Jak czytać zmienne środowiskowe w Scali


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.


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" )

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

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.



0

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

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

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.