周末开始使用 Kotlin 并尝试让 map 与运营商合作。不知何故,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")
我缺少什么速记运算符魔术/类型转换?
提前致谢。
最佳答案
这里的歧义是因为 Kotlin 可以解释表达式 cs += Pair(3, "c")
作为从原始映射和给定对创建新映射并将该映射分配回变量 cs = cs.plus(Pair(3, "c"))
的操作,或作为改变原始 map 的操作 cs.plusAssign(Pair(3, "c"))
要消除这种情况的歧义,请遵循 Kotlin 的座右铭 — make val
,不是 var
!
当您申报时 cs
作为 val(非可变变量),一旦初始化就不能重新赋值,所以这里唯一可用的操作是 plusAssign
.
关于使用运算符的 Kotlin Map,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33460065/