这段代码从stdin读取一行,我想将其拆分。
use std::io::stdin;
fn example() {
let mut input = String::new();
stdin().read_line(&mut input).expect("Failed to read line");
let mut parts = input.trim().split_whitespace();
let args = parts;
let new_dir = args.peekable().peek().unwrap();
println!("{}", new_dir);
}
编译器说:
error[E0597]: borrowed value does not live long enough
--> src/lib.rs:8:19
|
8 | let new_dir = args.peekable().peek().unwrap();
| ^^^^^^^^^^^^^^^ - temporary value dropped here while still borrowed
| |
| temporary value does not live long enough
9 | println!("{}", new_dir);
10 | }
| - temporary value needs to live until here
|
= note: consider using a `let` binding to increase its lifetime
我了解这意味着
args.peekable()
创建一个临时值,而println!("{}", new_dir);
借用了该值。我不知道临时值在哪里。我以为借用的值是从
args
,这里不会删除。args.peekable().peek().unwrap();
真正发生了什么? 最佳答案
这是args.peekable()
的结果,因为编译器会在错误消息中突出显示。 peekable
返回 Peekable
。然后,代码调用 peek
,它返回对迭代器内部内容的引用:
pub fn peek(&mut self) -> Option<&<I as Iterator>::Item>
要解决此问题,请按照编译器的建议进行操作:
let mut x = args.peekable();
let new_dir = x.peek().unwrap();