问题标签 [rust-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 投票
5 回答
65393 浏览

module - 如何跨模块文件使用宏?

我在同一个板条箱中的不同文件中有两个模块,板条箱已macro_rules启用。我想在另一个模块中使用一个模块中定义的宏。

我目前遇到编译器错误“ macro undefined: 'my_macro'”......这是有道理的;宏系统在模块系统之前运行。我该如何解决这个问题?

0 投票
3 回答
22974 浏览

debugging - 如何查看导致编译错误的扩展宏代码?

我有一个涉及宏的编译错误:

不幸的是,宏是递归的,所以很难弄清楚编译器在抱怨什么,而且行号似乎是针对扩展宏而不是我的代码的。

我怎样才能看到扩展的宏?是否有一个标志我可以传递给 rustc(甚至更好的货物)来转储它?

(这个宏来自rust-mdo,虽然我认为这并不重要。)

0 投票
3 回答
14031 浏览

rust - 如何调试宏?

所以我有以下我正在尝试调试的宏代码。我从Rust Book的“深渊”一节中摘取了它。我重命名了宏中的变量以更密切地关注这篇文章。

我的目标是让程序打印出 BCT 程序的每一行。我很清楚这是非常繁重的编译器。

rustc 给我的唯一错误是:

我可以采取哪些步骤来确定问题来自宏的何处?

这是我的代码:

0 投票
1 回答
2475 浏览

rust - 从父模块导入宏

我无法在 crate 中重复使用宏。

如果宏定义在./src/macros.rs

并用于./src/lib.rs

我看不到这个宏./src/submod/lib.rs

它产生错误消息error: macro undefined: 'my_macro!'

有没有办法可以在这个子模块中导入这个宏submod

0 投票
1 回答
1071 浏览

rust - 将整个宏输入传递给另一个宏

我正在尝试制作一个简单的宏来调用vec!它收到的任何内容,然后在返回新向量之前进行一些简单的处理:

问题是我的宏正在尝试解析语法,所以它抱怨逗号等。这是有道理的,但我不知道如何解决它。我认为这不是expr正确的片段说明符。如何让它在vec!不处理的情况下将原始输入传递给它?

0 投票
4 回答
5874 浏览

macros - 有没有办法用宏来计数?

我想创建一个打印“Hello”指定次数的宏。它的用法如下:

创建该宏的简单方法是:

但是,这不起作用,因为编译器不计算表达式;$times - 1不是计算的,而是作为新表达式输入宏。

0 投票
1 回答
6859 浏览

macros - Rust 宏中的 tt 元变量类型是什么意思?

我正在阅读一本关于 Rust 的书,并开始使用Rust 宏。除了最后一个 - 之外,所有元变量类型都在此处进行了解释并提供了示例tt。根据这本书,它是一个“单一的令牌树”。我很好奇,它是什么,它是用来做什么的?你能举个例子吗?

0 投票
1 回答
3344 浏览

rust - 无法在宏中使用 self,因为宏扩展忽略标记“self”

我想编写一个打印“OK”然后在方法中返回 self 的宏。这是我的第一个宏,所以我尝试了这个,认为它只会进行文本替换,但它失败了:

错误:

快速查看文档后,我知道这不仅仅是文本替换,但我仍然不知道如何使其工作。

0 投票
1 回答
213 浏览

emacs - emacs/spacemacs 是否支持嵌入在 Rust 宏中的嵌套 C++ 模式?

参考:rust-cpp

emacs/spacemacs 可以在主模式下支持嵌套模式吗?我习惯了 vim 和 emacs/spacemacs 的新手。

0 投票
1 回答
1410 浏览

rust - 是否可以使用传递给宏的项目参数作为方法?

我正在尝试创建一个宏,该宏生成一个struct提供一组传递给宏的方法。例如,调用:

StructName应该生成一个提供方法的空结构foo()

我最初尝试使用item宏 arg 类型。但是,当我尝试item在规则中使用 an 时,出现以下编译器错误:

是否可以使用item参数以这种方式在生成的结构中定义方法?有什么我想念的吗?

这是我定义的完整宏: