Карта Котлина с использованием операторов
Начал играть в выходные с 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")
Какой сокращенный оператор магии / кастинга мне не хватает?
Заранее спасибо.
1 ответ
Неоднозначность здесь заключается в том, что Котлин может интерпретировать выражение cs += Pair(3, "c")
либо как операция создания новой карты из исходной карты и заданной пары и присвоения этой карты обратно переменной cs = cs.plus(Pair(3, "c"))
или как операция, изменяющая исходную карту cs.plusAssign(Pair(3, "c"))
Чтобы устранить эту ситуацию, следуйте девизу Kotlin -make val
не var
!
Когда вы объявляете cs
как val (не изменяемая переменная), он не может быть переназначен после инициализации, поэтому здесь доступна только одна операция: plusAssign
,