29 个版本
使用旧的 Rust 2015
0.2.9 | 2018年11月8日 |
---|---|
0.2.7 | 2018年8月27日 |
0.2.5 | 2018年6月16日 |
0.2.4 | 2018年3月26日 |
0.0.1 | 2015年3月22日 |
#16 in #concatenation
191 每月下载量
在 4 crates 中使用
11KB
188 行
interpolate_idents
弃用警告
由于 Rust 1.30.0 中引入了稳定的过程宏支持,现在可以使用完全稳定的代码实现这个包最初的目标。请尝试使用 @dtolnay 的 paste
包来查看它是否可以满足您当前的所有用例。 paste
可以在稳定的生产环境中使用,并且不太可能在 Rust 版本之间出现破坏。
理想情况下,我们将弃用 interpolate_idents
,一旦我们确信没有用户在过渡到 paste
时被落下。请在 问题 #45 上发表评论或创建一个新问题,提出任何担忧和个人经验。谢谢!
摘要
警告! 此包使用过程宏(如今称为 编译器插件)并且只能与 Rust 的 nightly 发行版 一起使用。
由于 Rust 编译器解析宏的方式,您目前无法使用 concat_idents!
定义结构体、枚举、函数或字段。这可能在将来得到改变,但 interpolate_idents!
粗略地解决了目前缺乏宏系统的一些副作用。
#![feature(plugin)]
#![plugin(interpolate_idents)]
macro_rules! make_fn {
($x:ident) => ( interpolate_idents! {
fn [my_ $x _fn]() -> u32 { 1000 }
} )
}
现在 make_fn!(favorite);
等同于 fn my_favorite_fn() -> u32 { 1000 }
。
简而言之,将多个用空格分隔的标识符(或宏标识符变量)用方括号括起来以连接标识符。请检查 tests/tests.rs
以获取另一个示例。
这个插件很快就被匆忙拼凑在一起了。它可能性能不佳,并且肯定不可读。
仓库维护
我并没有积极地在夜间版本上开发,所以我没有太频繁地使用这个插件。我明白 libsyntax
是一个变幻莫测的生物,所以如果 interpolate_idents
在最新的夜间版本上无法编译,请提交一个问题或PR!