Dieser Code funktioniert:Warum implementiert die Standardbibliothek nicht Collect auf einem Tupel-Iterator ohne cloned()?
use std::collections::HashMap;
fn main() {
let result: HashMap<&str, &str> = [("name", "Luke")].iter().cloned().collect();
println!("{:?}", &result);
}
es nicht, wenn ich den Anruf zu cloned()
entfernen:
error[E0277]: the trait bound `std::collections::HashMap<&str, &str>: std::iter::FromIterator<&(&str, &str)>` is not satisfied
--> src/main.rs:4:65
|
4 | let result: HashMap<&str, &str> = [("name", "Luke")].iter().collect();
| ^^^^^^^ a collection of type `std::collections::HashMap<&str, &str>` cannot be built from an iterator over elements of type `&(&str, &str)`
|
= help: the trait `std::iter::FromIterator<&(&str, &str)>` is not implemented for `std::collections::HashMap<&str, &str>`
Mein Verständnis ist, dass die Standard-Bibliothek vieler Dinge für Tupel implementiert, aber nicht diesen Fall? Warum sollte es nicht so kompilieren?
Könnten Sie die Frage von OP zu ** why ** beantworten? Die Standardbibliothek implementiert 'FromIter' nicht für Referenzen von Tupeln? – Shepmaster
Fertig. Ich denke, dass ich die Erklärung richtig verstanden habe. – BookOwl
Sehr geschätzt. Warum kann es nicht ref tuple-Werte verwenden? Das funktioniert: 'let tup = & (& 1, &2); println! (" {:?} ", tup.0);' –