3个版本
0.1.3 | 2022年4月1日 |
---|---|
0.1.1 | 2022年4月1日 |
0.1.0 | 2022年4月1日 |
1730 在 过程宏
7KB
104 行
描述
一个允许在绑定中使用impl特性的宏。目前支持的语句:let
、const
(以下有一些限制),static
。这个crate将在未来的impl_trait_in_bindings特性中替换,但仍需进行重构和稳定化。
示例
#![feature(type_alias_impl_trait)]
#[macro_use]
extern crate bind_it;
fn main() {
bind_it!( let x: impl std::fmt::Display = true; );
// fails, even x variable is initialized with a boolean, its type is hidden behind `Display` trait,
// and the only thing that we can do - display x
// assert!(x);
// works
println!("{x}")
}
它是如何工作的?
最小编译器版本
rustc 1.61.0-nightly (c5cf08d37 2022-03-30)
,启用#![feature)type_alias_impl_trait]
限制
- 目前每个宏只支持一个项目
- 相关的常量尚不支持
- 每个impl Trait只允许一个类型。 tl;dr,你不能写
bind_it! {
let _: impl std::fmt::Display = if rand::random() > 0.5 {
"qwe"
} else {
5u8
};
};
尽管&str
和u8
都实现了Display
特性,但我们仍需要在编译时确定一个具体的类型。
依赖
~2MB
~43K SLoC