#traits #impl #bindings #macro #stabilized #let-static-const

nightly macro bind_it

一个宏,允许在绑定中使用impl特性,直到它们真正稳定。

3个版本

0.1.3 2022年4月1日
0.1.1 2022年4月1日
0.1.0 2022年4月1日

1730过程宏

MIT 许可证

7KB
104

描述

一个允许在绑定中使用impl特性的宏。目前支持的语句:letconst(以下有一些限制),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
        };
};

尽管&stru8都实现了Display特性,但我们仍需要在编译时确定一个具体的类型。

依赖

~2MB
~43K SLoC