Проблема с вашим кодом заключается в том, что вы выполняете следующие действия:
- Вы используете свой вектор с
into_iter
- Таким образом, внутри замыкания вы принимаете
String
по значению, которое вы заимствуете у split
- Во временном итераторе вы храните ссылку на эту строку
Вывод: вы пытаетесь вернуть ссылку налокальная переменная.
Чтобы решить эту проблему, вы должны создать собственные строки из разделенной строки и собрать их, чтобы они больше не содержали ссылки:
fn main() {
let strings = vec!["1 2".to_string(), "3 4".into()];
let result = strings.into_iter().flat_map(|str| str.split(" ").map(str::to_owned).collect::<Vec<_>>());
println!("{:?}", result.collect::<Vec<_>>());
}
На самом деле это будет меньшедорого не потреблять вектор сначала:
fn main() {
let strings = vec!["1 2".to_string(), "3 4".into()];
let result = strings.iter().flat_map(|str| str.split(" ")).map(str::to_owned);
println!("{:?}", result.collect::<Vec<_>>());
}