问题标签 [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.
module - 如何跨模块文件使用宏?
我在同一个板条箱中的不同文件中有两个模块,板条箱已macro_rules
启用。我想在另一个模块中使用一个模块中定义的宏。
我目前遇到编译器错误“ macro undefined: 'my_macro'
”......这是有道理的;宏系统在模块系统之前运行。我该如何解决这个问题?
debugging - 如何查看导致编译错误的扩展宏代码?
我有一个涉及宏的编译错误:
不幸的是,宏是递归的,所以很难弄清楚编译器在抱怨什么,而且行号似乎是针对扩展宏而不是我的代码的。
我怎样才能看到扩展的宏?是否有一个标志我可以传递给 rustc(甚至更好的货物)来转储它?
(这个宏来自rust-mdo,虽然我认为这并不重要。)
rust - 从父模块导入宏
我无法在 crate 中重复使用宏。
如果宏定义在./src/macros.rs
:
并用于./src/lib.rs
:
我看不到这个宏./src/submod/lib.rs
:
它产生错误消息error: macro undefined: 'my_macro!'
。
有没有办法可以在这个子模块中导入这个宏submod
?
rust - 将整个宏输入传递给另一个宏
我正在尝试制作一个简单的宏来调用vec!
它收到的任何内容,然后在返回新向量之前进行一些简单的处理:
问题是我的宏正在尝试解析语法,所以它抱怨逗号等。这是有道理的,但我不知道如何解决它。我认为这不是expr
正确的片段说明符。如何让它在vec!
不处理的情况下将原始输入传递给它?
macros - 有没有办法用宏来计数?
我想创建一个打印“Hello”指定次数的宏。它的用法如下:
创建该宏的简单方法是:
但是,这不起作用,因为编译器不计算表达式;$times - 1
不是计算的,而是作为新表达式输入宏。
macros - Rust 宏中的 tt 元变量类型是什么意思?
我正在阅读一本关于 Rust 的书,并开始使用Rust 宏。除了最后一个 - 之外,所有元变量类型都在此处进行了解释并提供了示例tt
。根据这本书,它是一个“单一的令牌树”。我很好奇,它是什么,它是用来做什么的?你能举个例子吗?
rust - 无法在宏中使用 self,因为宏扩展忽略标记“self”
我想编写一个打印“OK”然后在方法中返回 self 的宏。这是我的第一个宏,所以我尝试了这个,认为它只会进行文本替换,但它失败了:
错误:
快速查看文档后,我知道这不仅仅是文本替换,但我仍然不知道如何使其工作。
emacs - emacs/spacemacs 是否支持嵌入在 Rust 宏中的嵌套 C++ 模式?
参考:rust-cpp
emacs/spacemacs 可以在主模式下支持嵌套模式吗?我习惯了 vim 和 emacs/spacemacs 的新手。
rust - 是否可以使用传递给宏的项目参数作为方法?
我正在尝试创建一个宏,该宏生成一个struct
提供一组传递给宏的方法。例如,调用:
StructName
应该生成一个提供方法的空结构foo()
。
我最初尝试使用item
宏 arg 类型。但是,当我尝试item
在规则中使用 an 时,出现以下编译器错误:
是否可以使用item
参数以这种方式在生成的结构中定义方法?有什么我想念的吗?
这是我定义的完整宏: