rust 如何在main中返回多行错误消息?

2wnc66cl  于 2021-06-15  发布在  其他
关注(0)|答案(1)|浏览(87)

我想有一个main函数,可以失败,返回Err(String)和打印它的情况下失败。
我是这样试的:

fn main() -> Result<(), String> {
    Err(String::from("Line1\nLine2"))
}

它适用于简单字符串,但对于多行错误,显示\n\r\n而不是换行符。
如何正确显示换行符?

iklwldmw

iklwldmw1#

内置的打印就不行了,因为它总是使用Debug。但是你可以打印你自己的格式。你甚至可以有一个小的 Package 器,将Debug转发到Display,有一个方便的错误处理(但它可能与本身不是错误类型但可转换成错误类型的类型断开,这将隐式地使用错误类型运算符,但需要使用PrettyError进行显式转换。但是,如果您只在main()中保留PrettyError,则应该足够了):

use std::fmt;

pub struct PrettyError<T>(pub T);

impl<T> From<T> for PrettyError<T> {
    fn from(v: T) -> Self {
        Self(v)
    }
}

impl<T: fmt::Display> fmt::Debug for PrettyError<T> {
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        fmt::Display::fmt(&self.0, f)
    }
}

fn main() -> Result<(), PrettyError<String>> {
    Err(String::from("Line1\nLine2"))?;
    Ok(())
}
// Or
fn main() -> Result<(), PrettyError<String>> {
    Err(PrettyError(String::from("Line1\nLine2")))
}

相关问题