Es gibt zwei Dinge, die sofort dieses Programm verkürzen helfen:
- Typ Folgerung: Sie sehr selten Arten aus
&str
schreiben müssen: viel zu viele Anrufe to_string
hier
Ich würde es als schreiben:
fn main() {
let words = vec!["apple", "orange", "banana"];
let word = match words.get(4) {
Some(&s) => s,
None => "nil"
};
println!("word: {}", word);
}
Beachten Sie, dass Vec<T>::get
eine Option<&T>
zurückgibt, also hier eine Option<&&str>
, da wir s
vom Typ &str
(einfach &
) sein wollen, verwenden wir Some(&s)
als Muster. Eine andere Option wäre Some(s) => *s,
(hier s
&&str
zu sein und es zu dereferenzieren).
Natürlich kann dies alles noch weiter reduziert werden, indem man sich die spezifische API von Option
ansieht. Etwas weniger universell, aber Option
und Result
werden sehr oft in Rust verwendet (so sehr sind sie im Vorspiel !!!) und deshalb lohnt es sich, ihre APIs zu lernen.
In diesem Fall unwrap_or
entweder den Wert innerhalb Option
oder den ihm übergebenen Wert liefern:
fn main() {
let words = vec!["apple", "orange", "banana"];
let word = *words.get(4).unwrap_or(&"nil");
println!("word: {}", word);
}
Bit Referenz Jonglieren die Typen auf Line-up (auch bekannt als Typ Tetris) und es ist alles gut.
Sehr schön und klar. Ich habe das 'Some (& s)' bei meinem ersten Versuch mit '& str' verpasst. Vielen Dank! – shinkou