メモ置き場

question mark operator

Result<T,E>Option<T>型の値に適用可能。

fn main() {
    let _ = question_result();
    let _ = question_option();
}

fn question_result() -> Result<bool, ()> {
    println!("1. {:?}", Ok(true)?); // true
    println!("2. {:?}", Err(())?); // Err(())?を評価してreturn。println!は実行されない
    Ok(true) // 実行されない
}

fn question_option() -> Option<bool> {
    println!("3. {:?}", Some(true)?); // true
    println!("4. {:?}", None?); // None?を評価してreturn。println!は実行されない
    Some(true) // 実行されない
}
$ cargo run 2> /dev/null
1. true
3. true

参考: https://doc.rust-lang.org/reference/expressions/operator-expr.html#the-question-mark-operator