Próbuję przekonwertować wektor &str
par w HashMap
z poniższym fragmencie kodu:Rodzaj problem z Iterator zbierać
use std::collections::HashMap;
fn main() {
let pairs = vec!(("foo", "bar"), ("toto", "tata"));
let map: HashMap<&str, &str> = pairs.iter().collect();
println!("{:?}", map);
}
Jednak Kompilacja przerywa się ten błąd:
<anon>:5:47: 5:56 error: the trait `core::iter::FromIterator<&(&str, &str)>` is not implemented for the type `std::collections::hash::map::HashMap<&str, &str>` [E0277]
<anon>:5 let map: HashMap<&str, &str> = pairs.iter().collect();
jednak jeśli dodam .cloned()
przed wywołaniem collect()
wszystko działa poprawnie:
...
let map: HashMap<&str, &str> = pairs.iter().cloned().collect();
...
Nawet jeśli rozumiem komunikat o błędzie (nie ma realizacja cechy FromIterator<&(&str, &str)>
dla typu HashMap<&str, &str>
) nie rozumiem gdzie typ &(&str, &str)
pochodzi z (zgodnie z podpisem metoda w dokumentacji Rust) i dlaczego dzwoni cloned()
poprawki ten problem.