Zugriff auf das Letzte element von Vec oder eine Scheibe

Ich habe einige code, der wie folgt aussieht:

trait Stack {
    fn top(&mut self) -> Option<f64>;
}

impl Stack for Vec<f64> {
    fn top(&mut self) -> Option<f64> {
        match self.pop() {
            None => None,
            Some(v) => {
                self.push(v);
                Some(v)
            }
        }
    }
}

fn main() {
    let mut stack: Vec<f64> = Vec::new();
    stack.push(5.3);
    stack.push(2.3);
    stack.push(1.3);

    match stack.top() {
        Some(v) => println!("Top of the stack: {}", v),
        None => println!("The stack is empty"),
    }
}

Gerade jetzt, die top() Methode ist die änderung self, aber ich denke, dass dies nicht notwendig sein sollte. Der offensichtliche Weg, dies zu tun, es hat nicht wirklich funktioniert:

fn top(&mut self) -> Option<f64> {
    match self.len() {
        0 => None,
        n => self[n - 1],
    }
}

Habe ich gespielt, um ein bisschen mit der Umwandlung von usize zu i32 - und Rückseite, aber nichts von dem, was ich Schreibe, sieht so kurz und lesbar wie ich denke, es sollte.

InformationsquelleAutor Dave Vogt | 2015-02-02
Schreibe einen Kommentar