স্কালায় পরিবেশের পরিবর্তনশীলগুলি কীভাবে পড়বেন to


156

জাভাতে, পরিবেশের ভেরিয়েবলগুলি পড়া সহ সম্পন্ন হয় System.getenv()

স্কালায় এটি করার কোনও উপায় আছে?

উত্তর:


231

স্কেলা ২.৯ যেহেতু আপনি sys.envএকই প্রভাবের জন্য ব্যবহার করতে পারেন :

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

আমি মনে করি জাওয়ার পরিবর্তে স্কালাল এপিআই ব্যবহার করা ভাল। জেভিএম (। নেট, জাভাস্ক্রিপ্ট, নেটিভ ইত্যাদি) এর চেয়ে অন্যান্য প্ল্যাটফর্মগুলিতে স্কালাকে সংকলন করার জন্য বর্তমানে বেশ কয়েকটি প্রকল্প রয়েছে যা জাভা এপিআই-তে নির্ভরতা হ্রাস করা আপনার কোডটিকে আরও বহনযোগ্য করে তুলবে।


95
এটি সম্ভবত ব্যবহারের জন্য আরও ভাল অনুশীলন sys.env.get("VARIABLE")যা Option[String]ভেরিয়েবলটি অনুপস্থিত থাকলে আপনাকে একটি ত্রুটি ছুঁড়ে দেওয়ার পরিবর্তে একটি ত্রুটি দেবে।
ক্রিশ্চিয়ান ভ্রাবী

4
@ ক্রিশ্চিয়ানআরবি আমি বেশিরভাগ ক্ষেত্রেই এটিকে পছন্দ করব। তবে sys.envমাত্র একটি Map। আপনার জন্য উপযুক্ত যে কোনও পদ্ধতি আপনি পারেন।
প্যারাডিজমেটিক

3
sys.env.getOrElse("VARIABLE", "default value")আমার ক্ষেত্রেও সহায়ক ছিল যেখানে পরিবেশের পরিবর্তনশীল সংজ্ঞায়িত নাও করা যেতে পারে।
জোশ পিক

131

একটি অবজেক্ট আছে:

scala.util.Properties

এটিতে এমন পদ্ধতিগুলির সংকলন রয়েছে যা সহ পরিবেশের তথ্য পেতে ব্যবহার করা যেতে পারে

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

3
আমিও সম্পত্তি পছন্দ করি prefer এটি বিকল্পগুলি পুনরুদ্ধার করতে অনুমতি দেয় এবং এতে সাধারণত ব্যবহৃত বৈশিষ্ট্যের নাম রয়েছে।
ppopoff

25

একই ভাবে:

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

এখন যেহেতু আমি দৈনিক ভিত্তিতে স্কালা ব্যবহার করি, আমাকে অবশ্যই @ প্যারাডিজমেটিকের উত্তরের গৃহীত উত্তরটি সরিয়ে ফেলতে হবে। এটি স্কালা এপিআই ব্যবহার করে এবং মন্তব্যগুলিতে প্রস্তাবিত হিসাবে ব্যবহার করা হলে একটি বিকল্প ফিরে আসতে পারে।
গ্রীষ্মবুল

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 এর উপস্থিত থাকলে ফু-র ওভাররাইড করার সিনট্যাক্স। Https://github.com/tyypeafehub/config#optional-system-or-env-variable-overrides এ আরও বিশদ


0

সমস্ত পরিবেশের ভেরিয়েবল মুদ্রণ করতে আপনি ব্যবহার করতে পারেন

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

1
error: missing parameter typeআপনি যদি এটিকে কেবল কপি-পেস্ট করেন তবে আরগগুলিতে।
বজ্রপাতের গল্ফটি

@ থান্ডারগল্ফার: আমার বর্তমানে আমার মেশিনে স্কালা ইনস্টল নেই। আপনি কি অনুপস্থিত বুঝতে পেরেছিলেন?
ম্যাথিয়াস ব্রাণ

পরামিতিগুলিতে পরিবর্তন করার পরে (name: String, value: String), আমি পাচ্ছি error: type mismatch; found : (String, String) => Unit required: java.util.function.BiConsumer[_ >: String, _ >: String]
রোল্যান্ড ওয়েবার

1
এখানে এমন কিছু যা কাজ করে তবে তার জন্য একটি আমদানি দরকার: alvinalexander.com/scala/…
রোল্যান্ড ওয়েবার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.