Started playing the weekend with Kotlin and trying to get maps working with operators. Somehow Kotlin tells me I am confusing it with ambiguity.
Here is code that works (syntactically not like I want it to):
var columns = sortedMapOf("a" to 1, "b" to 2)
columns.plusAssign("c" to 3)
And here is code that simply does not compile (but syntactically closer to what I want)
var cs = sortedMapOf(1 to "a", 2 to "b")
cs += Pair(3, "c")
What shorthand operator magic/casting am I missing?
Thanks in advance.
The ambiguity here is because Kotlin can interpret the expression cs += Pair(3, "c")
either as operation creating new map from the original map and the given pair and assigning that map back to variable cs = cs.plus(Pair(3, "c"))
, or as operation mutating the original map cs.plusAssign(Pair(3, "c"))
To disambiguate this situation, follow the Kotlin motto — make val
, not var
!
When you declare cs
as val (non-mutable variable), it cannot be reassigned once it has been initialized, so the only operation becomes available here is plusAssign
.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With