Convert Vec into a slice of &str in Rust?
根据Steve Klabnik在Rust 1.0之前的文档中关于
我有一个
您可以使用
1 2 3 4 5 6 7 8 9 10 11 | fn test<T: AsRef<str>>(inp: &[T]) { for x in inp { print!("{}", x.as_ref()) } println!(""); } fn main() { let vref = vec!["Hello","world!"]; let vown = vec!["May the Force".to_owned(),"be with you.".to_owned()]; test(&vref); test(&vown); } |
如果没有内存分配,这实际上是不可能的1。
从
因此,虽然您可以从
-
要么接受
&[String] -
分配引用第一个
Vec 的新Vec<&str> ,并将其转换为&[&str]
作为分配示例:
1 2 3 4 5 6 7 8 9 | fn usage(_: &[&str]) {} fn main() { let owned = vec![String::new()]; let half_owned: Vec<_> = owned.iter().map(String::as_str).collect(); usage(&half_owned); } |
1不可能进行所需的转换,但是使用@aSpex的答案中所示的泛型和