无法创建目录时出现恐慌

Mar*_*era 2 rust

我正在编写一个 Rust 程序,它将根据用户输入创建一个目录。我想知道panic当发生时如何处理我自己的文本error,比如Permission Error等等......

fn create_dir(path: &String) -> std::io::Result<()> {
    std::fs::create_dir_all(path)?;
    Ok(())
}
Run Code Online (Sandbox Code Playgroud)

error发生此情况时不会执行任何操作

Cer*_*rus 6

对于这种情况,最简单的方法是使用unwrap_or_else()

fn create_dir(path: &str) {
    std::fs::create_dir_all(path)
        .unwrap_or_else(|e| panic!("Error creating dir: {}", e));
}
Run Code Online (Sandbox Code Playgroud)

请注意,出于此处描述的原因,我还更改了参数类型。


&Path然而,接受 a或会更惯用AsRef<Path>

use std::fs;
use std::path::Path;

fn create_dir<P: AsRef<Path>>(path: P) {
    fs::create_dir_all(path)
        .unwrap_or_else(|e| panic!("Error creating dir: {}", e));
}
Run Code Online (Sandbox Code Playgroud)

  • @MarcelKopera `|e| panic!("Error create dir: {}", e)` 是一个闭包,其中 `e` 是错误值。因此,如果“create_dir_all()”返回“Err”,则调用闭包,导致“恐慌!” (2认同)