【发布时间】:2015-03-06 06:03:10
【问题描述】:
我的错误是什么以及如何解决?
fn get_m() -> Vec<i8> {
vec![1, 2, 3]
}
fn main() {
let mut vals = get_m().iter().peekable();
println!("Saw a {:?}", vals.peek());
}
编译器的错误提示“考虑使用let 绑定”——但我已经是:
error[E0597]: borrowed value does not live long enough
--> src/main.rs:6:45
|
6 | let mut vals = get_m().iter().peekable();
| ------- ^ temporary value dropped here while still borrowed
| |
| temporary value created here
7 | println!("Saw a {:?}", vals.peek());
8 | }
| - temporary value needs to live until here
|
= note: consider using a `let` binding to increase its lifetime
这显然是一个新手问题——尽管我认为此时我已经写了足够多的 Rust,以至于我已经掌握了借用检查器......显然我没有。
这个问题类似于Using a `let` binding to increase value lifetime,但不涉及将表达式分解为多个语句,所以我认为问题并不相同。
【问题讨论】:
-
关于阅读错误消息的提示:“借用值的寿命不够长”。哪个借来的价值?看看跨度,它是
get_m()。 “考虑使用 let 绑定来增加它的生命周期”。也就是说,在get_m()部分上使用 let 绑定。 -
感谢@ChrisMorgan!曲线的范围是一个很好的线索。
标签: rust borrow-checker