rust - Rust 是否可以在过程宏代码中调用宏?
问题描述
例如,我在这样的impl
块上有一个过程宏属性,通常它处理方法:
#[my_proc_macro]
impl Foo {
pub fn bar1() {}
pub fn bar2() {}
}
现在宏用户可能不想编写这些方法,相反,他想调用一个宏来生成这些方法,例如:
#[my_proc_macro]
impl Foo {
generate_methods!();
}
现在my_proc_macro
将输入宏调用的标记,而不是宏调用结果的标记。
我的问题是:是否可以在generate_methods!()
内部扩展my_proc_macro
并使用生成的方法?
解决方案
不幸的是,目前(Rust 1.44.1)这是不可能的。
但是,这已经是很长一段时间内的一个已知问题。搜索词是“渴望宏扩展”。这个开放的 RFC于 2018 年 2 月开始:
为过程宏公开一个 API 以选择加入渴望扩展。这将:
- 允许过程宏和声明性宏处理作为输入传递的未扩展宏调用,
- 允许宏访问它们自己构造的宏调用的结果,
- 在语法当前禁止使用的地方启用宏。
所以人们正在努力,但我不会指望很快就能得到这个功能。毕竟这不是一个简单的问题。
推荐阅读
- python - 如何删除numpy数组中包含字符串的重复项?
- sql - 插入表而不指定列名并更改已知列中的值
- python - TensorFlow 导入错误:Anaconda_python 3
- java - 如何在 JBoss 7.1 中使用模块类加载器读取文件
- mean-stack - 前端不与后端通信
- microsoft-graph-api - 在 ms graph api 错误中搜索用户查询
- mysql - 如何根据我的 Sql 中的日期获取行的范围?
- node.js - 使用 ExpressJS 处理错误
- xamarin - 在样式中设置浮点值是否需要一些特殊代码?
- python - 根据输入形状的计算是否存在差异?(带有 Tensorflow 的 Python 中的 CNN)