Я пытался вытянуть переменные среды в scala сценарий с помощью Итераторов Java и / или Перечисления и понял, что доктор Frankenstein мог бы требовать происхождения, таким образом, я взломал следование из ужасного дерева вместо этого:
import java.util.Map.Entry
import System._
val propSet = getProperties().entrySet().toArray()
val props = (0 until propSet.size).foldLeft(Map[String, String]()){(m, i) =>
val e = propSet(i).asInstanceOf[Entry[String, String]]
m + (e.getKey() -> e.getValue())
}
Например, распечатать упомянутую ту же среду
props.keySet.toList.sortWith(_ < _).foreach{k =>
println(k+(" " * (30 - k.length))+" = "+props(k))
}
Не приступите к полировке этого t$ #d, просто покажите мне scala драгоценный камень, что я убежден, существует для этой ситуации (т.е. Свойства Java-> scala. Карта), заранее спасибо ;@)
Scala 2.7:
val props = Map() ++ scala.collection.jcl.Conversions.convertMap(System.getProperties).elements
Хотя это требует некоторой шрифтовой обработки. Позвольте мне поработать над этим немного больше.
val props = Map() ++ scala.collection.jcl.Conversions.convertMap(System.getProperties).elements.asInstanceOf[Iterator[(String, String)]]
Хорошо, это было легко. Дайте мне поработать над 2.8...
import scala.collection.JavaConversions.asMap
val props = System.getProperties() : scala.collection.mutable.Map[AnyRef, AnyRef] // or
val props = System.getProperties().asInstanceOf[java.util.Map[String, String]] : scala.collection.mutable.Map[String, String] // way too many repetitions of types
val props = asMap(System.getProperties().asInstanceOf[java.util.Map[String, String]])
Глаголы, конечно, можно уменьшить с помощью пары импортных шрифтов. Прежде всего, обратите внимание, что Карта
будет мутирующей на 2.8. Положительным моментом является то, что при обратном преобразовании карты вы получите исходный объект.
Теперь я понятия не имею, почему Свойства
реализуют Карта<Объект, объект>
, учитывая, что в javadoc'е четко указано, что ключом и значением является Строка
, но вот так. Приходится печатать, что делает неявный вариант гораздо менее привлекательным. При этом альтернатива является наиболее лаконичной.
EDIT
Scala 2.8 только что получил неявное преобразование из Properties
в mutable.Map[String,String]
, что делает большую часть этого кода спорным.