Gibt es eine Möglichkeit für die Rückgabe einer Referenz auf eine variable in einer Funktion?

Ich möchte ein Programm schreiben, das schreiben einer Datei in 2 Schritten.
Es ist wahrscheinlich, dass die Datei möglicherweise nicht vorhanden sein, bevor das Programm ausgeführt wird. Das mit dem Namen ist behoben.

Das problem ist, dass OpenOptions.new().write() scheitern kann. In diesem Fall möchte ich eine benutzerdefinierte Funktion aufzurufen trycreate(). Die Idee ist, erstellen Sie die Datei, anstatt es zu öffnen und ein handle zurück. Da das mit dem Namen ist behoben, trycreate() keine Argumente hat und ich kann nicht einstellen, ein Leben lang von den zurückgegebenen Wert.

Wie kann ich dieses problem beheben?

use std::io::Write;
use std::fs::OpenOptions;
use std::path::Path;

fn trycreate() -> &OpenOptions {
    let f = OpenOptions::new().write(true).open("foo.txt");
    let mut f = match f {
        Ok(file)  => file,
        Err(_)  => panic!("ERR"),
    };
    f
}

fn main() {
    {
        let f = OpenOptions::new().write(true).open(b"foo.txt");
        let mut f = match f {
            Ok(file)  => file,
            Err(_)  => trycreate("foo.txt"),
        };
        let buf = b"test1\n";
        let _ret = f.write(buf).unwrap();
    }
    println!("50%");
    {
        let f = OpenOptions::new().append(true).open("foo.txt");
        let mut f = match f {
            Ok(file)  => file,
            Err(_)  => panic!("append"),
        };
        let buf = b"test2\n";
        let _ret = f.write(buf).unwrap();
    }
    println!("Ok");
}

InformationsquelleAutor Nex | 2015-09-20

Schreibe einen Kommentar