¿Hay alguna forma de devolver una referencia a una variable creada en una función?

Quiero escribir un programa que escriba un archivo en 2 pasos. Es probable que el archivo no exista antes de ejecutar el programa. El nombre del archivo es fijo.

El problema es eseOpenOptions.new().write() puede fallar En ese caso, quiero llamar a una función personalizadatrycreate(). La idea es crear el archivo en lugar de abrirlo y devolver un identificador. Como el nombre de archivo es fijo,trycreate() no tiene argumentos y no puedo establecer una vida útil del valor devuelto.

¿Como puedo resolver este problema?

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");
}

Respuestas a la pregunta(2)

Su respuesta a la pregunta