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