症状
编译器报 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;应根据语义选择组合子。