首页 > 解决方案 > Unwrap_or_else 无法从 Path 获取扩展

问题描述

unwrap_or_else用于错误处理。以下代码无法编译:

use std::{path::Path, process::abort};

fn example() {
    Path::new("<path>").extension().unwrap_or_else(|err| {
        println!("{} {}", "", err);
        abort();
    });
}
error[E0593]: closure is expected to take 0 arguments, but it takes 1 argument
 --> src/lib.rs:4:37
  |
4 |     Path::new("<path>").extension().unwrap_or_else(|err| {
  |                                     ^^^^^^^^^^^^^^ ----- takes 1 argument
  |                                     |
  |                                     expected closure that takes 0 arguments

像这样的代码没有问题:

let input_file_reader = fs::File::open("<path>").unwrap_or_else(|err| {
    println!("{} {}", "", err);
    abort();
});

我试图查看示例,查看Path并查看一般的闭包结构,但我不明白为什么unwrap_or_else不能Path::extension单独使用。

标签: rust

解决方案


pub fn open<P: AsRef<Path>>(path: P) -> Result<File>;
pub fn extension(&self) -> Option<&OsStr>;

一个返回一个Result,而另一个返回一个Option。当没有扩展时,结果就是简单的None. 没有错误可以传递给回调。

let input_file_reader = fs::File::open("<path>").unwrap_or_else(|| ...);

推荐阅读