196得票5回答
如何在模块文件之间使用宏?

我在同一个 crate 的不同文件中有两个模块,crate 启用了 macro_rules。我想在一个模块中使用另一个模块定义的宏。// macros.rs #[macro_export] // or not? is ineffectual for this, afaik macro_rule...

91得票4回答
我该如何查看导致编译错误的宏展开代码?

我遇到了一个涉及宏的编译错误: <mdo macros>:6:19: 6:50 error: cannot move out of captured outer variable in an `FnMut` closure <mdo macros>:6 bind ( ...

44得票1回答
如何编写自定义的派生宏?

我正在尝试在Rust中编写自己的派生模式宏,并且关于它的文档在示例方面有些缺乏。 我有一个类似于如下结构体:#[derive(MyMacroHere)] struct Example { id: i64, value: Option<String>, } 我希望我...

42得票3回答
在一个extern crate语句之前加上#[macro_use]是什么意思?

在 Rust 中,有时我会看到在 extern crate 语句之前出现 #[macro_use]:#[macro_use] extern crate gotham_derive; 相较于没有#[macro_use],这个有什么作用呢? extern crate gotham_derive;

40得票1回答
Rust宏中的tt元变量类型是什么意思?

我正在阅读一本关于Rust的书,并开始尝试使用Rust宏。那里解释了所有元变量类型并提供了例子,除了最后一个 - tt。根据这本书的描述,它是“单个令牌树”。我很好奇,它是什么以及它用于什么?你能给个例子吗?

34得票3回答
如何使用quote宏在过程宏中报告错误?

我正在编写一个过程宏,它运行良好,但我在以符合人体工程学方式报告错误方面遇到了麻烦。使用 panic!“可以”,但不够优雅,也无法将错误消息漂亮地呈现给用户。我知道在解析TokenStream时可以报告好的错误,但我需要在解析后遍历AST时产生错误。宏调用看起来像这样: attr_test!...

32得票1回答
为什么 proc-macro 必须在 proc-macro crate 中定义?

我试图为我的trait创建一个派生宏,以简化一些东西。 我遇到了一些问题: #[proc_macro_derive] 属性只能用于 proc-macro 类型的 crate 并且,在修复了小问题 proc-macro=true 后: proc-macro crate类型目前无法导出除带有...

31得票2回答
如何以编程方式获取结构体字段的数量?

我有一个自定义结构体,其如下所示:struct MyStruct { first_field: i32, second_field: String, third_field: u16, } 是否有可能通过编程方式获取结构体字段的数量(例如,通过调用 field_coun...

27得票3回答
如何调试宏?

所以我有以下的宏代码,我正在尝试调试。我将其从 Rust Book中的“深入”部分中获取。我已经重命名了宏中的变量,以更紧密地遵循this帖子。 我的目标是使程序打印出BCT程序的每一行。我非常清楚这非常耗费编译器。 Rustc给我的唯一错误是: user@debian:~/rust/m...

24得票1回答
如何在宏中调用 self 的方法?

macro_rules! call_on_self { ($F:ident) => { self.$F() } } struct F; impl F { fn dummy(&self) {} fn test(&self) ...