Ich möchte map
verwenden, um über ein Array zu iterieren und Sachen pro Gegenstand zu erledigen und die for-Schleife loszuwerden. Ein Fehler, den ich nicht verstehe, blockiert meinen Versuch. Was ich erreichen möchte, besteht darin, einen Vektor von i32
zu durchlaufen und auf sie zu passen, um eine Zeichenkette mit Zeichenkettenliteralen zu bilden und sie dann am Ende zurückzugeben.Wie man auf einem Vec abbildet und eine Schließung mit Musterabgleich in Rust verwendet
Funktion:
pub fn convert_to_rainspeak(prime_factors: Vec<i32>) -> String {
let mut speak = String::new();
prime_factors.iter().map(|&factor| {
match factor {
3 => { speak.push_str("Pling"); },
5 => { speak.push_str("Plang"); },
7 => { speak.push_str("Plong"); },
_ => {}
}
}).collect();
speak
}
fn main() {}
Ausgang:
error[E0282]: type annotations needed
--> src/main.rs:10:8
|
10 | }).collect();
| ^^^^^^^ cannot infer type for `B`
_allocating strings_: Soll ich eine Konstante & str verwenden und ihre Variable in der Übereinstimmung verwenden? _what is & {T] _: Tut mir leid, ich habe das vorher nie gesehen - werde das doc suchen aber mybe hast du auch eine gute Erklärung – xetra11
'& [T]' ist [a * slice *] (http: // doc .rust-lang.org/stable/book/primitive-types.html # scheiben); Die offizielle Dokumentation beschreibt sie gut.Ich bin unklar, was du mit der Konstante meinst und sie im 'Spiel' verwendest. Ein String-Literal ist eine Konstante und hat keine Zuweisung. Ihr alter (Pre-Edit) Code hat jedes Element zu einer 'String', nicht zu einer' & str' gemappt und dann zu einer anderen 'String' gesammelt. Ich bezog mich auf die innere 'Zeichenfolge' mit den zusätzlichen Zuweisungen. – Shepmaster