4个稳定版本
1.2.0 | 2023年11月8日 |
---|---|
1.1.0 | 2022年12月14日 |
1.0.1 | 2022年12月8日 |
222 在 无标准库
7KB
63 行
strict-result
?
操作符在 Result
上有一个对错误类型的隐式 .into()
,以使其更容易将错误类型升级到更广泛的错误类型。然而,这有时会在高度泛型环境中对类型推断造成问题,因为它实际上变成了 .into().into()
,这是模糊的。为了解决这个问题,这个包定义了一个单独的 .strict()?
操作符,它不执行这个隐式的 .into()
。
例如,让我们定义一个简单的泛型函数
fn passthrough<T>(f: impl FnOnce() -> T) -> T {
f()
}
如果我们尝试结合使用这个函数和 ?
操作符,将会得到一个错误,因为泛型 <T>
无法确定。
passthrough(|| {
std::fs::create_dir("example")?;
Ok(()) // cannot infer type of the type parameter `E` declared on the enum `Result`
})?;
在这种情况下,我们可以使用 .strict()?
来要求错误类型与外部类型相等。
use strict_result::Strict;
passthrough(|| {
std::fs::create_dir("example")?;
Ok(())
}).strict()?;
此包使用 try_trait_v2
功能,因此需要 nightly。