为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

Smart猫小萌 2019-06-03 13:15:55
是否有任何方法返回对在函数中创建的变量的引用?我想要写一个程序,将写一个文件在两个步骤。在程序运行之前,该文件很可能不存在。文件名是固定的。问题是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");}
查看完整描述

2 回答

?
隔江千里

TA贡献1906条经验 获得超10个赞

有没有任何方法可以在没有参数的情况下从函数返回引用?

否(除了对静态值的引用,但这些引用在这里没有帮助)。

但是,您可能想看看OpenOptions::create..如果您更改第一行main

let  f = OpenOptions::new().write(true).create(true).open(b"foo.txt");

如果文件还不存在,将创建该文件,这将解决您原来的问题。


查看完整回答
反对 回复 2019-06-03
  • 2 回答
  • 0 关注
  • 588 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信