Dart报错:'int?'无法赋值给'num'参数,求排查原因
问题分析与解决
核心问题1:变量名笔误
你函数内初始化的累加变量是score,但循环里误写成了_score——这个未定义的变量不仅会触发错误,也是你疑惑类型推断异常的诱因之一。
核心问题2:Map访问的可空性
即使你把score_map声明为<String, int>,Dart的Map[]操作符返回的仍然是int?类型:因为无法保证传入的字符一定存在于Map的key集合中(比如输入非字母字符时),空安全机制会要求你处理可能的null值,这才是错误提示The argument type 'int?' can't be assigned to the parameter type 'num'的根源。
修正后的代码
Map<String, int> score_map = { 'A': 1, 'E': 1, 'I': 1, 'O': 1, 'U': 1, 'L': 1, 'N': 1, 'R': 1, 'S': 1, 'T': 1, 'D': 2, 'G': 2, 'B': 3, 'C': 3, 'M': 3, 'P': 3, 'F': 4, 'H': 4, 'V': 4, 'W': 4, 'Y': 4, 'K': 5, 'J': 8, 'X': 8, 'Q': 10, 'Z': 10 }; int score(String word){ int score = 0; for(int i = 0; i < word.length; i++){ // 用?? 0兜底处理不存在的字符,避免null报错 score += score_map[word[i].toUpperCase()] ?? 0; } return score; }
可选优化方案
如果你能确保输入的word只包含英文字母,也可以用空断言!强制告诉Dart这个值不会为null:
score += score_map[word[i].toUpperCase()]!;
但这种方式有风险,如果输入非字母字符,运行时会抛出Null错误。
内容的提问来源于stack exchange,提问作者bubbleUp
相关产品推荐
相关产品推荐

