在进行错误捕获时,我通常让函数返回结果。但我觉得每次都写 Result<type, Box<...>> 真的很冗长,是否有一些内置的简写?
fn something() -> Result<(), Box<dyn std::error::Error>> {
Ok(())
}
Run Code Online (Sandbox Code Playgroud)
您可以只使用泛型参数定义类型别名。很多板条箱都是这样的:
type Result<T> = std::result::Result<T, Box<dyn std::error::Error>>;
fn something() -> Result<()> {
Ok(())
}
Run Code Online (Sandbox Code Playgroud)
该anyhow板条箱由 serde 的作者编写,是围绕一种Box<dyn std::error::Error>名为 的人体工程学替代方案而设计的anyhow::Error。它定义anyhow::Result<T>为以下别名Result<T, anyhow::Error>:
fn something() -> anyhow::Result<()> {
Ok(())
}
Run Code Online (Sandbox Code Playgroud)
缺点是它是一个外部板条箱,尽管它是一种使用非常广泛且经过充分测试的板条箱。
好处是,您可以获得良好的人体工程学、附加功能(例如context()和with_context()Result)以及重要的优化 -anyhow::Error是窄指针而不是宽指针,因此与 相比,您的sResult更小且更高效Box<dyn Error>。