【发布时间】:2020-10-16 20:01:34
【问题描述】:
考虑以下代码:
fn fun() {
let mut vec = vec![];
{
let x: &[u8] = &[1, 2];
vec.push(x); // why is the compiler happy?
let y = [3, 4];
let z: &[u8] = &y;
vec.push(z); // ok compiler is not happy
}
println!("{:?}", vec); // after commenting this line the compiler is happy again
}
我理解为什么编译器会抱怨"borrowed value does not live long enough" 为y,但为什么它对x 很满意? x 是对没有名称的切片的引用——这个匿名切片何时被删除,它的生命周期是多少?
在注释完println 之后,一切都会编译,我猜这是因为编译器知道vec 没有在任何地方使用,所以它不在乎。
【问题讨论】:
-
vec的预期类型是什么?我相信编译器认为它Vec<& 'static [u8; 2]>。尝试显式设置其类型。
标签: rust