use std::cell::RefCell;
pub fn max_level_sum(num: RefCell<Option<i32>>) {
let num = num;
if let None = *num.borrow() {
println!("none");
}
}
上面的代码加上第 3 行之后,num 和 第 4 行的临时变量会同时在结束的地方析构,从而报生命周期错误——borrowed value does not live long enough
。
解决方法包括注释掉第 3 行、在第 5 行后添加分号手动使临时变量提前析构等方法。
我刚学 rust 不久,想请问各位,这是 NLL 实现的生命周期检查的 bug 还是设定?谢谢各位
1
共 4 条评论, 1 页
评论区
写评论相关讨论:
if let
是有一点奇怪 最后的大括号前面加一个分号的确可以解决问题
我试着把第三行的 shadowing 删除了,就可以通过编译了。 原因:
RefCell::<T>::borrow(&self) -> Ref<T>
, 实际上Ref<T>
的定义是Ref<'b, T>
,这里推导出为 传入的num: RefCell<T>
的生命周期,然后 shadowing 导致num 提前被drop,因此报错。手动测了一下,确实有你说的问题。