Der ?-Operator
Übersetzung des ?-Operators
Abschnitt betitelt „Übersetzung des ?-Operators“Gegeben sei ein beliebiger Ausdruck e vom Typ Result<T, E>. Welcher Code-Snippet stellt am besten dar, wie e? übersetzt wird?
Wenn e ein Result ist, extrahiert e? den Wert innerhalb von Ok, falls möglich, andernfalls wird der Err-Wert aus der aktuellen Funktion zurückgegeben.
Inkompatible ?-Typen
Abschnitt betitelt „Inkompatible ?-Typen“// Angenommen, hello.txt enthält den Inhalt "will"
fn read_username_from_file() -> Option<String> { let mut username_file = File::open("hello.txt")?; let mut username = String::new(); username_file.read_to_string(&mut username)?; Some(username)}
fn main() { println!("{}", read_username_from_file().unwrap());}File::open gibt ein Result zurück, aber der Rückgabetyp von read_username_from_file erwartet ein Option. Daher ist es ungültig, den ?-Operator zu verwenden, bevor das Result in ein Option umgewandelt wurde (z.B. mit der Methode Result::ok).