Еще лучшим способом было бы написать функцию в таким образом, что на самом деле это не волнует :
fn my_print<T: AsRef<str>>(args: impl Iterator<Item = T>) {
for arg in args {
println!("=> {}", arg.as_ref());
}
}
fn main() {
let vec = vec!["one".to_string(), "two".to_string()];
my_print(vec.into_iter()); // works!
}
Если вы не можете изменить сигнатуру функции, вам нужно предварительно преобразовать итератор :
fn my_print<'a>(args: impl Iterator<Item = &'a str>) {
for arg in args {
println!("=> {}", arg);
}
}
fn main() {
let vec = vec!["one".to_string(), "two".to_string()];
my_print(vec.iter().map(|s| s.as_ref()));
}
Обратите внимание, что в этом случае вы не можете использовать into_iter
, потому что никто не будет владеть строками.