Карта Котлина с использованием операторов

Начал играть в выходные с 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,

Другие вопросы по тегам