【发布时间】:2020-10-14 10:53:47
【问题描述】:
这不能编译:
fn foo() -> std::io::Result<()> {
todo!()
}
pub fn bar() -> anyhow::Result<()> {
foo()
}
这也不是:
pub fn bar() -> anyhow::Result<()> {
foo().into()
}
但这确实:
pub fn bar() -> anyhow::Result<()> {
Ok(foo()?)
}
? 进行转换背后的机制是什么,有没有比Ok(...?) 更好的方法来进行这种转换?
【问题讨论】:
-
也许你会喜欢
fehlercrate。 -
您可能想要转换错误,而不是包含它的结果 - 即
foo().map_err(Into::into)而不是foo().into()。 -
完全同意。问题“如何正确处理错误?”和“解释如何 deshugars 这个运算符”一样吗? @Shepmaster
-
“问号运算符如何转换错误类型?”; “转换背后的机制是什么?确实” - 来自重复:“那么问号运算符将能够将任何兼容的错误转换为这些类型之一,因为有各种 Into 和 From 特征实现。”
-
在冗长的回答中埋藏着一条不经意的评论。 title 是同一个问题,但如果你真的阅读了这个问题,你会发现他在问如何从一种错误类型转换为另一种错误类型,他并没有问
?这样做的机制。
标签: error-handling rust