9得票1回答
在实现过程宏时出现了循环依赖的包问题

我尝试实现一个 proc_macro Dump,类似于 serdes 的 Serialize。 为此,我有一个包含我的“基本”结构体(在这种情况下是 P1 和 P2)的 crate foo,这些结构体应该只能被转储。 接下来,我有一个包含过程宏本身的 crate foo_derive。 ...

9得票1回答
将字符串转换为TokenStream

如何将一个字符串(str)转换为 Rust 中的 TokenStream? 我尝试使用 quote! 宏。 let str = "4"; let tokens = quote! { let num = #str; }; // #str is a str not i32 这里的目标是为一...

9得票2回答
如何在过程宏生成的代码中创建卫生的标识符?

当编写一个声明式的(macro_rules!)宏时,我们自动获得了宏卫生。在这个例子中,我在宏中声明了一个名为f的变量,并传入一个标识符f,它会成为一个局部变量: macro_rules! decl_example { ($tname:ident, $mname:ident, ($(...

8得票1回答
实现过程宏时,如何检查类型是否实现了一个特质?

我正在尝试创建一个proc-macro,以推导并为结构体实现特质,并且我需要确保结构体内的所有字段都实现了Display。 我该如何检查呢? 此外,我该如何检查属性是否也实现了Iterator? (我希望能处理迭代器项是否也实现了display)。 我使用了syn和quote库。我已经成...

7得票1回答
什么地方适合将过程宏工件存储在磁盘上,以便由Cargo清理?

我有一个过程宏需要存储半持久化状态。该状态需要在编译运行中存活,并且应该在运行 cargo clean 命令时被清理。 过去,我使用了 ./target 目录来实现这个目的。然而,这是一个错误的做法,因为我的一些过程宏生成的文件可能会与 rustc 和 cargo 生成的文件发生冲突。同时,...