为什么我不能说:val list = properties.map((key,value) – >“$ key = $ value”)
在Kotlin我可以说
//sweet for ((key,value) in System.getProperties()) println("$key = $value")
但我不能说
//sour val properties = System.getProperties() val list = properties.map((key,value) -> "$key = $value")
什么是在Scala中相当于properties.map{case (key, value) => s"$key = $value"}
的Kotlin?
在Kotlin 1.0中,你可以说:
val properties = System.getProperties() val list = properties.map { "${it.key} = ${it.value}" }
如果你喜欢把地图条目解开来分开值,你可以这样说:
val properties = System.getProperties() val list = properties.map { val (key, value) = it; "$key = $value" }
在Kotlin 1.1中,“现在可以使用解构声明语法解开传递给lambda的参数”( Kotlin 1.1 – Kotlin编程语言新增内容 ):
val properties = System.getProperties() val list = properties.map { (key,value) -> "$key = $value" }
你的问题与推论毫无关系。
在scala你doc:
import collection.JavaConversions._ val properties = System.getProperties() val list = properties.map{case (key,value) => s"$key = $value"}
至于你的意见。
从斯卡拉多年开始,到现在探索科特林,我倾向于更喜欢科特林的力量和简单性,然而,如果我仍然处于学习模式,能够更好地推断事情会更好。
代码中的问题与类型推断无关。 连语法都没错。
请更正lambda表达式和解包的语法:
val properties = mapOf(1 to "First", 2 to "Second") val list = properties.map {val (value, key) = it; "$key = $value"}
有一个计划的Kotlin功能,但不会在1.0中使用,这将允许编写{(key,value) – >“$ key = $ value”}来解压缩一个类型的值类型 – cypressious
感谢@cypressious,这正是我所希望的。 基本上,答案是科特林还在不断发展,人们还在不断磨砺着很酷的东西。
现在我已经发现了
//savory val properties = System.getProperties() val list = properties.map {property -> "${property.key} = ${property.value}"}
相当接近。