स्काला में पर्यावरण चर कैसे पढ़ें


158

जावा में, पठन पर्यावरण चर के साथ किया जाता है System.getenv()

क्या स्काला में ऐसा करने का कोई तरीका है?

जवाबों:


232

Scala 2.9 के बाद से आप sys.envएक ही प्रभाव के लिए उपयोग कर सकते हैं :

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

मुझे लगता है कि जावा के बजाय स्काला एपीआई का उपयोग करना अच्छा है। वर्तमान में JVM (.NET, जावास्क्रिप्ट, देशी, आदि) की तुलना में स्काला को अन्य प्लेटफार्मों पर संकलित करने के लिए कई परियोजनाएं हैं। जावा एपीआई पर निर्भरता कम करना, आपके कोड को और अधिक पोर्टेबल बना देगा।


96
यह शायद बेहतर अभ्यास का उपयोग करने के लिए है sys.env.get("VARIABLE")जो आपको Option[String]एक त्रुटि फेंकने के बजाय देगा यदि वह चर गायब है।
क्रिस्टियन व्राबी

4
@CristianVrabie मैं इसे ज्यादातर मामलों में पसंद करूंगा। लेकिन sys.envसिर्फ ए Map। आपके लिए जो भी विधि उपयुक्त हो आप कर सकते हैं।
प्रतिमान

3
sys.env.getOrElse("VARIABLE", "default value")मेरे मामले में भी मददगार था जहाँ पर्यावरण चर को परिभाषित नहीं किया जा सकता था।
जोश पीक

131

एक वस्तु है:

scala.util.Properties

इसमें पर्यावरण जानकारी प्राप्त करने के लिए उपयोग की जाने वाली विधियों का एक संग्रह है, जिसमें शामिल हैं

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

3
मैं भी गुण पसंद करेंगे। यह वैकल्पिक को पुनः प्राप्त करने की अनुमति देता है, और आमतौर पर उपयोग किए जाने वाले गुणों के नाम हैं।
ppopoff

25

उसी तरह:

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

अब जब मैं एक दैनिक आधार पर स्काला का उपयोग करता हूं, तो मुझे @ paradigmatic के उत्तर में स्वीकृत उत्तर को स्थानांतरित करना होगा। यह स्काला एपीआई का उपयोग करता है और यदि टिप्पणियों में सुझाए गए अनुसार उपयोग किया जा सकता है।
समरबुलब

11

सीधे के साथ एक डिफ़ॉल्ट का उपयोग करना getOrElseअधिक sys.envमानचित्र ( val myenv: Map[String, String] = sys.env):

sys.env.getOrElse(envVariable, defaultValue)

आपको सामग्री मिलती है envVariableया, यदि यह मौजूद नहीं है, तो defaultValue


5

यदि लाइटबेंड की कॉन्फ़िगरेशन लाइब्रेरी का उपयोग किया जाता है (प्ले 2 और अक्का में डिफ़ॉल्ट रूप से) तो आप उपयोग कर सकते हैं

foo = "default value" foo = ${?VAR_NAME}

एक पर्यावरण चर VAR_NAME मौजूद होने पर foo को ओवरराइड करने के लिए सिंटैक्स। Https://github.com/typesafehub/config#optional-system-or-env-variable-overrides में अधिक जानकारी


0

सभी पर्यावरण चर मुद्रित करने के लिए , आप उपयोग कर सकते हैं

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

1
error: missing parameter typeअगर आप इसे कॉपी-पेस्ट करते हैं तो आर्ग्स पर।
गरज

@thundergolfer: मेरे पास वर्तमान में Scala मेरी मशीन पर स्थापित नहीं है। क्या आपने पता लगाया कि क्या गायब था?
मथायस ब्रौन

मापदंडों को बदलने के बाद (name: String, value: String), मुझे मिल रहा है error: type mismatch; found : (String, String) => Unit required: java.util.function.BiConsumer[_ >: String, _ >: String]
रोलैंड वेबर

1
यहाँ कुछ है कि काम करता है, लेकिन एक आयात की आवश्यकता है: alvinalexander.com/scala/…
रोलाण्ड वेबर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.