我有以下的代码:
它工作得很好。我不明白为什么这段代码没有报错,
此外,当我为
#[derive(Debug)]
pub enum List<'a> {
Nil,
Cons(i32, &'a List<'a>)
}
{
let x = Cons(1, &Cons(2, &Nil));
println!("{:?}", x);
}
它工作得很好。我不明白为什么这段代码没有报错,
Cons(2, &Nil)
在构造Cons(1, _)
之前难道不会被删除吗?此外,当我为
List
添加一个空的impl Drop
后,上述代码就无法工作了。impl<'a> Drop for List<'a> {
fn drop(&mut self) {
}
}
它报告了错误,即borrowed value does not live long enough
适用于Cons(2, _)
和Nil
。
为什么在添加impl Drop
之前和之后会有这样的差异?
Nil
被提升为一个静态常量,因此引用具有静态寿命期。 - Sven Marnach