Rust编译LeetCode第98题代码报E0282类型注解错误如何解决
错误产生原因
这不是编译器Bug,是你使用的1.55版本Rust的类型推断能力局限导致的:
- 你代码中的
node类型是&Rc<RefCell<TreeNode>>,调用borrow()方法会返回Ref<'_, T>类型的智能指针,其中泛型参数T对应TreeNode - Rust 1.55版本无法通过后续
node.left、node.val等字段访问操作,回溯推断出borrow()返回值的泛型参数,因此要求你显式补充类型标注 - LeetCode平台使用的Rust版本更高,类型推断逻辑做了优化,因此相同代码可以正常编译
修复方案
可以任选以下任意一种方案解决:
- 给
node变量添加显式类型标注,直接告知编译器返回值类型:
// 替换原来的 let node = node.borrow(); 行 let node: std::cell::Ref<'_, TreeNode> = node.borrow();
- 使用完全限定语法调用
borrow方法,显式指定泛型参数:
// 替换原来的 let node = node.borrow(); 行 let node = RefCell::<TreeNode>::borrow(node);
- 升级Rust编译器版本到1.59及以上,高版本已经优化了该场景下的类型推断能力,不需要修改代码即可正常编译。
内容的提问来源于stack exchange,提问作者Jerry Yuan
相关产品推荐
相关产品推荐

