You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 18:46:01