【发布时间】:2018-06-15 23:18:46
【问题描述】:
这行得通:
let paths: Vec<String> = args.collect();
let paths = paths.iter().map(|f| std::path::Path::new(&f));
这不起作用:
let paths = ::std::env::args().map(|f| std::path::Path::new(&f));
error[E0597]: `f` does not live long enough
--> src/main.rs:2:66
|
2 | let paths = ::std::env::args().map(|f| std::path::Path::new(&f));
| ^-- borrowed value needs to live until here
| ||
| |`f` dropped here while still borrowed
| borrowed value does not live long enough
为什么我需要将collect 和args 迭代器放入一个向量中,只是为了产生另一个迭代器?为什么我不能直接从另一个迭代器生成一个迭代器?
【问题讨论】:
-
你很可能想要
PathBuf,而不是Path。 -
PathBuf是可变的。我在这里不需要可变性。为什么你认为我需要PathBuf?