问题标签 [rust-decl-macros]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
244 浏览

rust - 有没有办法在没有过程宏的属性中“做宏的事情”?

具体来说,我正在尝试将宏输出放入文档注释中。我很兴奋这正是我想要的:

下一步是用我的内容替换该字符串。据此我不会写#[doc=my_content!()],并且属性宏是程序性的,所以我需要另一个板条箱,而且(我认为)我的内容可以在不需要任何程序性宏功能的情况下生成。

有没有办法以某种方式使用“常规宏”来做到这一点,还是我不走运?

0 投票
1 回答
1143 浏览

rust - 尝试使用外部宏的参数调用内部宏时,为什么会得到“意外令牌”?

higher!尝试将宏接收到的表达式传递给宏时,我不理解这种失败lower!

我希望最后一个标记符合 中的规则lower!,但编译器告诉我这是出乎意料的。我在这里想念什么?如何转移higher!as $xstuffto收到的表达式lower!

0 投票
2 回答
378 浏览

rust - 使用不同“种类”元素构建枚举的宏

我正在尝试提出一个我称之为宏的宏

它将创建一个枚举来表示状态机状态,其中一些将是最终(接受)状态 - S2, S3. 生成的枚举及其impl应如下所示:

我天真的尝试:

最终出现以下错误:

尝试删除第二行中模式之间的逗号:

正在生产另一个:

我了解导致这些错误的原因 - 它认为这final是另一个标识符匹配r。但是编写这样一个宏的正确方法是什么(如果可能的话,不会过于复杂)?

我对宏调用有充分的灵活性,因为这是我个人的学习练习。主要目标是学习正确的做事方式。如果可能的话,最好让这个宏final在任何位置接受。

0 投票
1 回答
536 浏览

rust - 如何匹配 Rust 宏中的特征?

我的目标是作为输入特征类型。

到目前为止,我尝试的是编写这样的解析器。

但它造成了当地的歧义。

0 投票
1 回答
232 浏览

rust - 如何实现定义新公共类型并返回该类型实例的宏?

我想实现一个结构,macro_rules!因为泛型需要大量的样板和特征搜索。

有问题的结构内部有一个哈希表,但键和值类型由用户提供。代码如下:

这不会编译,因为它试图将结构粘贴到主函数中:

我该如何解决它?如何将结构与impl块一起公开粘贴到主函数之外?

0 投票
1 回答
116 浏览

rust - 我可以定义一个将扩展为函数调用的宏吗?

我(天真地)尝试过这个,但它不会在屏幕上打印任何内容:

0 投票
1 回答
115 浏览

rust - 通过宏生成属性值

假设我有一个ident名为module_name. 如何通过这个参数生成属性的值?

简单来说,我想生成这样的东西:

0 投票
0 回答
44 浏览

rust - 如何在同一个 crate 中使用 Rust 宏?

我有以下来源:

内存.rs

我有一个宏:

块.rs

我想使用它:

它给了我错误:


为了使帖子简短,我在Gist上有完整的代码。

如果我把宏放在里面chunk.rs,那么我可以使用它。我不认为如何跨模块文件使用宏?作品。Rust 改变了它的特性吗?我在 Rust 1.44.1 上。

0 投票
2 回答
296 浏览

rust - 在 Rust“macro_rules”宏中的调用站点使用本地绑定

考虑以下代码段:

如果我编译它,我会得到:

但是不应该将quick_hello调用main扩展为包含该let h = "hello"语句的块,从而允许我在调用站点将其用作“hello”的速记吗?

我可能会知道这样做是为了保持宏的卫生,但是如果我需要上述行为怎么办?有没有办法“关闭”卫生来实现这一目标?

0 投票
1 回答
483 浏览

rust - 如何编写一个显示文件和行号以及可变数量参数的宏?

我在 Rust 中找到了几个有用的宏,即:file!(), line!(), stringify!()我还发现 Rust 允许使用可变参数的宏,如此所述:

我的目标是以某种方式将所有这些宏组合到一个我将在故障排除/调试期间使用的宏中。trace!所以在下面的例子中调用宏:

应该扩展到这样的东西:

可能吗?如果是,那么这样的宏将如何工作?