Увеличение значения изменяемой карты приводит к ошибке обнуляемого получателя - PullRequest
0 голосов
/ 06 июня 2019

Я новичок в Kotlin и пробовал гуглить, но я не понимаю.

Пример здесь: https://try.kotlinlang.org/#/UserProjects/q4c23aofcl7lb155oc307cnc5i/sgjm2olo277atiubhu2nn0ikb8

Код:

fun main(args: Array<String>) {
    val foo = mutableMapOf('A' to 0, 'C' to 0, 'G' to 0, 'T' to 0)
    foo['A'] = foo['A'] + 1
    println("$foo['A']")    
}

Я не понимаю;почему оператор индексирования возвращает обнуляемый тип?Карта в этом примере определяется как Map<Char, Int>, а не Map<Char, Int?>.

. Я могу переопределить ее с помощью ненулевого утверждения, так что это работает:

foo['A'] = foo['A']!!.plus(1)

Есть ли чищеспособ

1 Ответ

1 голос
/ 06 июня 2019

Вы можете использовать оператор индекса с произвольными символами, даже теми, которые не являются частью карты, как в случае несуществующего ключа. Для этого есть два очевидных решения: либо выбросить исключение, либо вернуть null. Как видно из документации, стандартная библиотека возвращает null в operator fun get, что переводится оператором индекса:

/**
 * Returns the value corresponding to the given [key], or `null` if such a key is not present in the map.
 */
public operator fun get(key: K): V?

Альтернатива getValue, которая описывается так:

Возвращает значение для данного [ключа] или выдает исключение, если такого ключа нет на карте.

Используется так: val v: Int = foo.getValue('A')

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...