Lesen von Umgebungsvariablen in Scala


Antworten:


231

Seit Scala 2.9 können Sie sys.envfür den gleichen Effekt verwenden:

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

Ich finde es schön, die Scala-API anstelle von Java zu verwenden. Derzeit gibt es mehrere Projekte, um Scala auf anderen Plattformen als JVM (.NET, Javascript, native usw.) zu kompilieren. Wenn Sie die Abhängigkeiten von der Java-API reduzieren, wird Ihr Code portabler.


95
Es ist wahrscheinlich eine bessere Vorgehensweise, sys.env.get("VARIABLE")die Ihnen Option[String]einen Fehler gibt, als einen Fehler auszulösen, wenn diese Variable fehlt.
Cristian Vrabie

4
@CristianVrabie Ich würde es in den meisten Fällen auch vorziehen. Ist sys.envaber nur ein Map. Sie können jede Methode wählen, die für Sie geeignet ist.
Paradigmatisch

2
sys.env.getOrElse("VARIABLE", "default value")war auch in meinem Fall hilfreich, in dem die Umgebungsvariable möglicherweise nicht definiert ist.
Josh Peak

131

Es gibt ein Objekt:

scala.util.Properties

Hier finden Sie eine Sammlung von Methoden, mit denen Umgebungsinformationen abgerufen werden können, einschließlich

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

3
Ich würde auch Eigenschaften bevorzugen. Es ermöglicht das Abrufen von Optionen und verfügt über Namen für häufig verwendete Eigenschaften.
ppopoff

25

Gleicher Weg:

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

Jetzt, da ich Scala täglich benutze, muss ich die akzeptierte Antwort auf die Antwort von @ paradigmatic verschieben. Es verwendet die Scala-API und kann bei Verwendung wie in den Kommentaren vorgeschlagen eine Option zurückgeben.
Sommerbirne

10

Verwenden Sie direkt eine Standardeinstellung mit getOrElseüber sys.envMap ( val myenv: Map[String, String] = sys.env):

sys.env.getOrElse(envVariable, defaultValue)

Sie erhalten den Inhalt des envVariableoder, falls nicht vorhanden, des defaultValue.



0

Zum Drucken aller Umgebungsvariablen können Sie verwenden

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

1
error: missing parameter typeauf den Argumenten, wenn Sie dies nur kopieren und einfügen.
Thundergolfer

@thundergolfer: Ich habe Scala derzeit nicht auf meinem Computer installiert. Hast du herausgefunden, was fehlte?
Matthias Braun

Nachdem (name: String, value: String)ich die Parameter auf geändert habe , bekomme ich error: type mismatch; found : (String, String) => Unit required: java.util.function.BiConsumer[_ >: String, _ >: String].
Roland Weber

1
Hier ist etwas, das funktioniert, aber einen Import erfordert: alvinalexander.com/scala/…
Roland Weber
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.