是否有任何方法返回对在函数中创建的变量的引用?

是否有任何方法返回对在函数中创建的变量的引用?

我想要写一个程序,将写一个文件在两个步骤。在程序运行之前,该文件很可能不存在。文件名是固定的。

问题是OpenOptions.new().write()可能会失败。在这种情况下,我想调用一个自定义函数。trycreate()..这样做的目的是创建文件,而不是打开它并返回一个句柄。既然文件名是固定的,trycreate()没有参数,并且我不能设置返回值的生存期。

我如何解决这个问题?

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


Smart猫小萌
浏览 589回答 2
2回答

隔江千里

有没有任何方法可以在没有参数的情况下从函数返回引用?否(除了对静态值的引用,但这些引用在这里没有帮助)。但是,您可能想看看OpenOptions::create..如果您更改第一行main到let  f = OpenOptions::new().write(true).create(true).open(b"foo.txt");如果文件还不存在,将创建该文件,这将解决您原来的问题。
打开App,查看更多内容
随时随地看视频慕课网APP