Scala'da çevre değişkenleri nasıl okunur


Yanıtlar:


232

Scala 2.9'dan beri sys.envaynı etki için kullanabilirsiniz :

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

Java yerine Scala API'sini kullanmak güzel. Şu anda Scala'yı JVM (.NET, javascript, native, vb.) Dışındaki diğer platformlara derlemek için birkaç proje var. Java API'sındaki bağımlılıkları azaltmak, kodunuzu daha taşınabilir hale getirecektir.


96
Bu değişken eksikse hata atmak yerine sys.env.get("VARIABLE")size Option[String]bir hata verecek kullanmak daha iyi bir uygulamadır .
Cristian Vrabie

4
@CristianVrabie Ben de çoğu durumda tercih ederim. Ama sys.envsadece bir Map. Sizin için uygun olan yöntemi kullanabilirsiniz.
paradigmatik

3
sys.env.getOrElse("VARIABLE", "default value")ortam değişkeninin tanımlanamayacağı yerde de yardımcı oldu.
Josh Peak

131

Bir nesne var:

scala.util.Properties

bunun çevre bilgisi almak için kullanılabilecek bir yöntem koleksiyonu vardır.

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

3
Ayrıca Özellikleri tercih ederim. Opsiyonelleri almayı sağlar ve yaygın olarak kullanılan özellikler için isimlere sahiptir.
ppopoff

25

Aynı şekilde:

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

Artık Scala'yı günlük olarak kullandığım için, kabul edilen cevabı @ paradigmatic'un cevabına taşımalıyım. Scala API'sını kullanır ve yorumlarda önerildiği gibi kullanılırsa bir Seçenek döndürebilir.
summerbulb

11

Doğrudan bir varsayılan kullanma getOrElseüzerinde sys.env(Harita val myenv: Map[String, String] = sys.env):

sys.env.getOrElse(envVariable, defaultValue)

envVariableYa da yoksa içeriği alırsınız defaultValue.



0

Tüm ortam değişkenlerini yazdırmak için aşağıdakileri kullanabilirsiniz:

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

1
error: missing parameter typebunu kopyalayıp yapıştırırsanız
thundergolfer

@thundergolfer: Şu anda makinemde Scala yüklü değil. Neyin eksik olduğunu anladın mı?
Matthias Braun

Parametreleri değiştirdikten sonra (name: String, value: String)alıyorum error: type mismatch; found : (String, String) => Unit required: java.util.function.BiConsumer[_ >: String, _ >: String].
Roland Weber

1
İşte, ancak bir ithalat gerektiren bir şey: alvinalexander.com/scala/…
Roland Weber
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.