#strict #help #inference #operator

nightly 无std strict_result

添加了一个 Result::strict()? 函数,以帮助进行类型推断

4个稳定版本

1.2.0 2023年11月8日
1.1.0 2022年12月14日
1.0.1 2022年12月8日

222无标准库

MIT/Apache

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。

无运行时依赖