Was ist der Vorteil der Verwendung einer Folge?

Ich verstehe nicht, warum Result existiert in Rust. Ich kann sehen, wie Option können nützlich sein, aber mit Result scheint nur zu erschweren-code unnötig.

Betrachten Sie das folgende Beispiel:

#[derive(PartialEq, Eq, Debug)]
enum MyErr {
    None,
    FailOne,
}

fn returns_tuple() -> (u8, MyErr) {
    //(1, None) //<-- Success path
    (0, MyErr::FailOne)
}

fn returns_result() -> Result<u8, MyErr> {
    //Ok(1) //<-- Success path
    Err(MyErr::FailOne)
}

#[test]
fn test_check_return_values() {
    let x = returns_result();
    if x.is_ok() {
        println!("result: Is OK: {}", x.unwrap()); //<-- Must use unwrap
    } else {
        match x.err().unwrap() { //<-- Again, unwrapping
            MyErr::None => {}, //Required for match
            MyErr::FailOne => println!("result: Failed One"),
        }
    }
}

#[test]
fn test_check_return_values_2() {
    let (y, err) = returns_tuple();
    match err {
        MyErr::None => println!("tuple: Is OK: {}", y),
        MyErr::FailOne => println!("tuple: Failed one"),
    }
}

Das einzige, was ich sehen kann ist, dass es minorly erhöht die Bequemlichkeit der Funktion Schriftsteller, wie Sie können, rufen Sie einfach Ok() und Err() Ergebnisse zurückgegeben.

Ich habe gesehen, einige Leute sagen, die so Sie können Bedingungen verwenden, aber das ist überhaupt nicht wahr; Sie können Bedingungen verwenden, perfekt auch mit Tupeln. (Hinweis — "Bedingungen" waren eine Funktion von Rost, die entfernt wurden, bevor 1.0)

Habe ich auch gesehen, einige Leute sagen, dass Result ist performant, dass wieder ein Tupel, aber Result ist ein Tupel, also ich sehe nicht, wie das der Fall sein kann.

InformationsquelleAutor Doug | 2014-03-05
Schreibe einen Kommentar