#dart
Вопрос:
Код, на который жалуется Dart:
Map<String,int> get_frequency(String text) {
Map<String,int> retval = {};
for (int i = 0; i<text.length; i) {
retval[text[i]] = retval[text[i]] ?? 0;
retval[text[i]] ; //<---- this is where dart is complaining.*
}
return retval;
}
void main() {
const paragraphOfText = 'Once upon a time there was a Dart programmer who '
'had a challenging challenge to solve. Though the challenge was great, '
'a solution did come. The end.';
var data = get_frequency(paragraphOfText);
print(data);
}
Очевидно, что строка, отмеченная (*), не может быть null , так как же мне сообщить об этом Dart? Я попробовал оператор утверждения null (!), Но это не сработало.
Включена защита от нуля.
Сообщение об ошибке:
challenge2.dart:5:20: Error: Operator ' ' cannot be called on 'int?' because it is potentially null.
retval[text[i]] ;
^
challenge2.dart:5:20: Error: A value of type 'num' can't be assigned to a variable of type 'int'.
retval[text[i]] ;
^
Комментарии:
1. Если Dart «жалуется»… ТОГДА, ПОЖАЛУЙСТА, СКОПИРУЙТЕ / ВСТАВЬТЕ ТОЧНОЕ СООБЩЕНИЕ ОБ ОШИБКЕ В СВОЙ ВОПРОС! Вопрос: Включена ли защита от null ?
Ответ №1:
Возможное решение — изменить строку
retval[text[i]] ; //<---- this is where dart is complaining.*
в
retval[text[i]] = retval[text[i]]! 1;
Просто понял это.
Комментарии:
1. Да, в общем, это то, что вы должны сделать. Также смотрите github.com/dart-lang/language/issues/1113 . В вашем случае вы также могли бы объединить его с предыдущей строкой:
retval[text[i]] = (retval[text[i]] ?? 0) 1;