如何将返回字符串的迭代器转换为可以传递给&[&str]
的函数?我试图将迭代器映射到超过&str
秒的迭代器,但我得到一个错误:
error[E0515]: cannot return reference to function parameter `s`
--> src/main.rs:89:52
|
89 | let args: Vec<&str> = std::env::args().map(|s| s.as_str()).collect();
| ^^^^^^^^^^ returns a reference to data owned by the current function
为什么会出现这个错误?args
是main中的一个局部变量,因此它的生存期肯定会延长到函数的末尾,因此在整个parse_args
调用过程中都是有效的.
如果函数应该采用不同的类型,我可以更改它,但我的印象是这种类型对我的目的是正确的-我不需要拥有对向量的访问权限,也不需要拥有对值的访问权限.
以下是重现错误的代码:
fn main() {
let args: Vec<&str> = std::env::args().map(|s| s.as_str()).collect();
let config = parse_args(&args);
// do stuff with config
}
fn parse_args(args: &[&str]) {
// parse args
}