【发布时间】:2021-08-02 03:41:44
【问题描述】:
定义地图后(以字母为键,拼字游戏得分为值)
Map<String, int> letterScore //I'm omitting the rest of the declaration
当我尝试这个功能时(在 DartPad 中)
int score(String aWord) {
int result = 0;
for (int i = 0; i < aWord.length; ++i) {
result += letterScore[aWord[i]];
}
return result;
}
无论我是通过将变量声明为num 还是int 来进行实验,我都会收到错误消息:
错误:“int?”类型的值不能分配给类型的变量 'num' 因为'int?'可以为空,并且'num'不是[我在将所有数值变量声明为int后得到了这个]
错误:不能从函数返回“num”类型的值 返回类型“int”。
错误:'num?' 类型的值不能分配给类型的变量 'num' 因为'num?'可以为空,而 'num' 不是。
我了解整数和浮点(或双精度)数之间的区别,它是 int 与 int? 和 num 与 num? 我不明白,以及使用哪种形式声明变量时。我应该如何声明和使用int 或num 变量以避免这些错误?
【问题讨论】:
-
您的问题是
Map上的[]运算符返回一个可以是null的值。原因是如果您在Map中请求不存在的内容,它将返回null。因此,在您的情况下,letterScore在使用[]运算符时将返回int?。 -
因此,您需要处理
[]返回null的情况。或者您可以使用letterScore[aWord[i]]!(参见!符号)这将强制分析器停止抱怨,并且应该只看到该值不可为空。但是,如果[]返回null,您将获得运行时异常。
标签: dart