我之前经常使用Vec<&str>
,但是在Discord上有人说服我改用&[&str]
,但是在某些情况下这会产生问题。例如,以下代码曾经可以正常工作:
fn main() {
let pos: Vec<String> = vec!["foo".to_owned(), "bar".to_owned(), "baz".to_owned()];
let pos: Vec<&str> = pos.iter().map(AsRef::as_ref).collect();
}
当我将第二行改为:
let pos: &[&str] = pos.iter().map(AsRef::as_ref).collect();
我收到了错误提示:
error[E0277]: a value of type `&[&str]` cannot be built from an iterator over elements of type `&_`
--> bin/seq.rs:3:51
|
3 | let pos: &[&str] = pos.iter().map(AsRef::as_ref).collect();
| ^^^^^^^ value of type `&[&str]` cannot be built from `std::iter::Iterator<Item=&_>`
|
= help: the trait `FromIterator<&_>` is not implemented for `&[&str]`
我该如何将一个
Vec<String>
转换为&[&str]
。我从StackOverflow上的这个答案中得到了这个方法,但我试图将其移植到&[&str]
上并没有成功。
&Vec<T>
用作&[T]
,因为它有一个解引用强制转换,但你需要使用.collect()
转换成Vec
。 - kmdreko&
。 - Ömer Erden