Unwrappe_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

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(|| ...);

最新更新