如下这个方法,是可以正常工作的
pub fn open_file<F>(f: F,file: &Option<String>) -> Result<File>
where F: Fn(&Path)->Result<File> {
let file = match file {
Some(file) => {
let path = Path::new(file);
f(path)
},
None => {
做某些事情
f(path)
}
但是,如果把match换成map,闭包f中就没办法用path打开文件了,而且在闭包f中调用path的exists()方法也是可以正常工作的。 环境是stable-x86_64-pc-windows-gnu 版本1.65.0
1
共 4 条评论, 1 页
评论区
写评论以及更惯用的:
--
👇
苦瓜小仔: 你的代码逻辑上错误。
很难从你提供的破碎的代码中知道你想如何处理错误。
你可能想要这样:https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=a738fed7ccb2283686a132eee48a3dbe
你的代码逻辑上错误。
很难从你提供的破碎的代码中知道你想如何处理错误。
你可能想要这样:https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=a738fed7ccb2283686a132eee48a3dbe
应该和惰性求值没关系,因为已经调用到了闭包f中的方法,不过打开文件的时候返回error,error是找不到这个文件,但是调用path.exists确返回true
--
👇
Neutron3529: map是惰性求值,你必须使用那个map才能得到正确结果。
map是惰性求值,你必须使用那个map才能得到正确结果。