← 中文资源

简体中文版本

Rust 报 E0308:类型不匹配,期望 X 实际为 Y

通过对齐类型、处理 Option 与 Result 以及修正引用与值,解决 E0308 类型不匹配。

阅读英文原文

症状

编译器报 E0308,类型不匹配,并给出期望类型与实际类型。不匹配可能是两种整数宽度、期望 &str 却是 String、期望 Option 或 Result 却是裸值,或条件分支返回不同类型。由于 Rust 不做隐式强制转换,必须显式写出转换。

诊断

读取两侧类型;数值差异用显式转换;引用与所有权用借用或克隆对齐;用 ok_or、map、unwrap_or 等组合子处理 Option/Result。

cargo build 2>&1 | head -30

根因

表达式产生的类型与上下文要求的类型不同,可能是数值不匹配、引用与所有权不匹配,或缺少 Option 或 Result 包装。

修复

显式转换数值;以借用或克隆匹配引用期望;用合适的组合子在 Option、Result 与普通值之间转换,使分支与表达式类型一致。

验证

重新构建确认类型错误消失,再跑测试确认转换保持了预期值且错误情形已处理。数据正确且构建干净即证明修复。

常见陷阱

用 .unwrap() 强行取 Option/Result 会在错误路径 panic;应根据语义选择组合子。