此Rust程序从用户那里收集单词/行,并将每个单词/行添加到变量line_set
中。我想在将每个单词添加到line_set
之前将代码更改为 trim 。
use std::collections::HashSet;
use std::io;
fn main() {
let mut line_set = HashSet::new();
for i in 1..4 {
let mut line = String::new();
io::stdin()
.read_line(&mut line)
.expect("Failed to read line");
//let line = line.trim();
line_set.insert(line.clone());
if i == 3 {
for l in &line_set {
println!("{}",l);
}
}
}
}
当我尝试向应用于当前单词的String::trim
添加调用时,该程序不再编译:
error[E0597]: `line` does not live long enough
--> src/main.rs:12:20
|
12 | let line = line.trim();
| ^^^^ borrowed value does not live long enough
13 | line_set.insert(line.clone());
| -------- borrow later used here
...
19 | }
| - `line` dropped here while still borrowed
我使用了rustc
的{{1}}开关,它表示“发生此错误是因为某个值仍在借用时被丢弃了”。我曾希望使用--explain
方法可以避免该问题。如何克服错误?