Как использовать операторы типа * = и + = с картами Dart и нулевой безопасностью

Если у меня есть карта вроде:

Map<String, int> myMap = Map();

Добавьте ключ и значение:

myMap.putIfAbsent("yolo", 1000);

Затем добавьте число с помощью оператора типа +=

myMap["yolo"] += 100;

С нулевой безопасностью он выдает ошибку, говоря

Метод «+» не может быть вызван безоговорочно, потому что получатель может быть «нулевым».

Как лучше всего установить значение на основе ключа на карте?


person Matthew    schedule 13.03.2021    source источник
comment
Это github.com/dart-lang/language/issues/1113. В настоящее время вам нужно будет сделать myMap['yolo'] = myMap['yolo']! + 100;.   -  person jamesdlin    schedule 13.03.2021


Ответы (1)


Это ожидаемая ошибка. Если ваша карта не содержит записи с ключом "yolo", то вызов myMap["yolo"] += 100; вызовет ошибку null во время выполнения.

Если 0 - разумное значение по умолчанию для этого контекста, вы можете написать что-то вроде:

myMap["yolo"] = (myMap["yolo"] ?? 0) + 100;
person cameron1024    schedule 13.03.2021
comment
Обратите внимание, что не имеет значения, содержит ли map запись или нет; Map.operator[] всегда возвращает тип, допускающий значение NULL, что предотвращает использование с ним +=. - person jamesdlin; 13.03.2021
comment
Вам нужен оператор ??+=. :) - person Randal Schwartz; 13.03.2021