2 个版本
0.1.1 | 2019 年 11 月 6 日 |
---|---|
0.1.0 | 2019 年 11 月 6 日 |
#2152 在 Rust 模式
7KB
Is-Impl
关于
这是一个简单的宏,仅用于检查表达式是否符合 trait 类型。
动机
在编写复杂的 future 和 streams 代码时,当时我必须使用 futures 0.1 和 futures 0.3 库,我经常遇到大量的 .compat()
调用。我在其他类型语言中通常使用的一种技术是在各个地方添加类型,直到我能够精确地定位问题。
问题是,在 Rust 中,类型要么有时很长,要么根本无法命名。因此,理想情况下,你想要检查类型是否符合 trait。天真地,我尝试了以下内容
let f: impl Future<Output=i32> = something();
但这不是有效的 Rust 语法。impl trait 不能用于这些位置。现在,有了这个 trait,你可以将上面的断言写成以下内容
let f = is_impl!(dyn Future<Output=i32>, something());
更详细的例子可以在 示例 和文档中找到。
还有类似的 crate,如 assert_impl,但我发现将断言直接在开发中使用很有用。