2015-11-01 50 views
4

开始与Kotlin一起玩周末,并尝试让地图与运营商合作。莫名其妙地Kotlin告诉我,我混淆了它的模糊性。使用运营商的Kotlin地图

这里是代码,工程(语法不喜欢我希望它):

var columns = sortedMapOf("a" to 1, "b" to 2) 
columns.plusAssign("c" to 3) 

这里是代码,根本无法编译(但是从语法上更接近我想要的)

var cs = sortedMapOf(1 to "a", 2 to "b") 
cs += Pair(3, "c") 

我错过了什么简写术士的魔法/铸造?

在此先感谢。

+0

我明白这个问题,但我只是'columns.put(“C”,3)解决它;' –

+0

JB,约定 - 有一个100点的方式,使其工作(功能)。关键是Kotlin支持+ =运算符,它应该可以工作,并且我想用它来读数学,我希望我的代码能够读取数据。此外,由于我没有得到它的工作意味着我在概念上缺少一些东西 – user1210708

+0

我在kotlin松弛频道上传达了你的问题。让我们看看是否有答案... –

回答

7

这里的歧义是因为科特林可以解释表达cs += Pair(3, "c")或者作为操作产生从原始地图和给定的一对新的地图和分配该地图回可变cs = cs.plus(Pair(3, "c")),或作为操作突变原始地图cs.plusAssign(Pair(3, "c"))

为了消除这种情况,请遵循Kotlin格言 - 使val,而不是var

当您将cs声明为val(非可变变量)时,它在初始化后不能重新分配,所以唯一的操作是plusAssign

+0

如果cs是var而不是val,那么您是否可以确认无法解决歧义? –

+0

伊利亚 - 谢谢 - 确认和工作。哇!不知道该怎么做(绝对是我习惯于几乎所有其他语言的一切模式的变化)......但现在将注意它。另一件事是,为什么它可以找出cs.plusAssign()而不是cs。+ =具有相同的Pair参数。我自然会认为它知道将要发生什么以及它将要发生什么。 – user1210708

+0

对不起 - 你已经回答的第二个问题......正在大声思考。 – user1210708