Cách đọc biến môi trường trong Scala


155

Trong Java, đọc các biến môi trường được thực hiện với System.getenv().

Có cách nào để làm điều này trong Scala?

Câu trả lời:


231

Kể từ Scala 2.9, bạn có thể sử dụng sys.envcho cùng một hiệu ứng:

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

Tôi nghĩ thật tuyệt khi sử dụng API Scala thay vì Java. Hiện tại có một số dự án để biên dịch Scala sang các nền tảng khác ngoài JVM (.NET, javascript, bản địa, v.v.) Giảm các phụ thuộc vào API Java, sẽ giúp mã của bạn dễ di chuyển hơn.


95
Có lẽ nên sử dụng cách tốt hơn để sys.env.get("VARIABLE")cung cấp cho bạn Option[String]thay vì đưa ra lỗi nếu thiếu biến đó.
Cristian Vrabie

4
@CristianVrabie Tôi cũng thích nó, trong hầu hết các trường hợp. Nhưng sys.envchỉ là một Map. Bạn có thể bất cứ phương pháp nào phù hợp với bạn.
nghịch lý

2
sys.env.getOrElse("VARIABLE", "default value")cũng hữu ích trong trường hợp của tôi khi biến môi trường có thể không được xác định.
Josh Đỉnh

131

Có một đối tượng:

scala.util.Properties

cái này có một tập hợp các phương thức có thể được sử dụng để lấy thông tin môi trường, bao gồm

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

3
Tôi cũng thích Thuộc tính. Nó cho phép truy xuất các tùy chọn và có tên cho các thuộc tính thường được sử dụng.
ppopoff

25

Cùng một cách:

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

Bây giờ tôi sử dụng Scala hàng ngày, tôi phải chuyển câu trả lời được chấp nhận sang câu trả lời của @ paradigmatic. Nó sử dụng API Scala và nếu được sử dụng như được đề xuất trong các nhận xét có thể trả về Tùy chọn.
mùa hè

10

Sử dụng trực tiếp một mặc định với getOrElsetrên sys.envBản đồ ( val myenv: Map[String, String] = sys.env):

sys.env.getOrElse(envVariable, defaultValue)

Bạn có được nội dung của envVariable hoặc, nếu nó không tồn tại , defaultValue.



0

Để in tất cả các biến môi trường, bạn có thể sử dụng

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

1
error: missing parameter typetrên args nếu bạn chỉ sao chép-dán này.
thundergolfer

@thundergolfer: Hiện tại tôi chưa cài đặt Scala trên máy. Bạn đã tìm ra những gì còn thiếu?
Matthias Braun

Sau khi thay đổi các tham số (name: String, value: String), tôi nhận được error: type mismatch; found : (String, String) => Unit required: java.util.function.BiConsumer[_ >: String, _ >: String].
Roland Weber

1
Đây là một cái gì đó hoạt động, nhưng yêu cầu nhập: alvinalexander.com/scala/ trộm
Roland Weber
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.