Ausgeliehener Wert lebt beim Erstellen eines Vec @ nicht lange gen

Anmerkung der Redaktion: Diese Frage wurde vor Rust 1.0 gestellt. Seitdem haben sich viele Funktionen und Typen sowie bestimmte Sprachsemantiken geändert. Der Code in der Frage ist nicht mehr gültig, aber die Ideen, die in den Antworten ausgedrückt werden, können sein.

Ich versuche, die Dateien in einem Verzeichnis aufzulisten und den Dateinamen in mein eigenes @ zu kopiereVec. Ich habe verschiedene Lösungen ausprobiert, aber es ergibt sich immer das Problem, dass nicht genügend lebende Variablen erstellt werden können. Ich verstehe meinen Fehler nicht.

fn getList(action_dir_path : &str) -> Vec<&str> {
    let v = fs::readdir(&Path::new(action_dir_path))
            .unwrap()
            .iter()
            .map(|&x| x.filestem_str().unwrap())
            .collect();
    return v;
}

Warum beschwert sich der Compiler über "x"? X ist mir egal, ich will das&str drin und ich dachte&str waren statisch.

Ich habe es auf diese Weise versucht, aber ich habe das gleiche Ergebnis erzielt, als der Compiler sich über "Pfade" beschwerte, die nicht lange genug leben.

fn getList2(action_dir_path : &str) -> Vec<&str> {
    let paths = fs::readdir(&Path::new(action_dir_path)).unwrap();
    let mut v : Vec<&str> = Vec::new();

    for path in paths.iter(){
       let aSlice = path.filestem_str().unwrap();
       v.push(aSlice);
    }

    return v;
}

Hier istDer Spielplat.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage