Cara membaca variabel lingkungan di Scala


Jawaban:


232

Karena Scala 2.9 Anda dapat menggunakan sys.envuntuk efek yang sama:

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

Saya pikir lebih baik menggunakan Scala API daripada Java. Saat ini ada beberapa proyek untuk mengkompilasi Scala ke platform lain selain JVM (.NET, javascript, asli, dll.) Mengurangi dependensi pada Java API, akan membuat kode Anda lebih portabel.


96
Ini mungkin praktik yang lebih baik untuk digunakan sys.env.get("VARIABLE")yang akan memberi Anda Option[String]daripada melemparkan kesalahan jika variabel itu hilang.
Cristian Vrabie

4
@ ChristianVrabie Saya lebih suka juga, dalam banyak kasus. Tapi sys.envhanya a Map. Anda dapat menggunakan metode apa pun yang sesuai untuk Anda.
paradigmatik

3
sys.env.getOrElse("VARIABLE", "default value")juga membantu dalam kasus saya di mana variabel lingkungan mungkin tidak didefinisikan.
Josh Peak

131

Ada sebuah objek:

scala.util.Properties

ini memiliki kumpulan metode yang dapat digunakan untuk mendapatkan info lingkungan, termasuk

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

3
Saya juga lebih suka Properti. Ini memungkinkan untuk mengambil Opsional, dan memiliki nama untuk properti yang umum digunakan.
ppopoff

25

Cara yang sama:

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

Sekarang saya menggunakan Scala setiap hari, saya harus memindahkan jawaban yang diterima ke jawaban @ paradigmatic. Ini menggunakan Scala API dan jika digunakan seperti yang disarankan dalam komentar dapat mengembalikan Opsi.
summerbulb

11

Menggunakan langsung default dengan getOrElselebih dari sys.envPeta ( val myenv: Map[String, String] = sys.env):

sys.env.getOrElse(envVariable, defaultValue)

Anda mendapatkan konten envVariableatau, jika tidak ada defaultValue,.



0

Untuk mencetak semua variabel lingkungan, Anda dapat menggunakan

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

1
error: missing parameter typepada args jika Anda hanya menyalin-menempelkan ini.
thundergolfer

@ thundergolfer: Saat ini saya belum menginstal Scala di komputer saya. Apakah Anda mengetahui apa yang hilang?
Matthias Braun

Setelah mengubah parameter ke (name: String, value: String), saya mengerti error: type mismatch; found : (String, String) => Unit required: java.util.function.BiConsumer[_ >: String, _ >: String].
Roland Weber

1
Ini adalah sesuatu yang berfungsi, tetapi memerlukan impor: alvinalexander.com/scala/…
Roland Weber
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.