9得票2回答
有没有可能获取单个宏的扩展而不是整个文件的扩展?

我刚刚发现了一个问题:如何查看导致编译错误的宏代码的扩展?。是否可以获取单个宏的扩展而不是整个文件的扩展?

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 这里的目标是为一...

8得票1回答
如何创建一个宏,能够匹配枚举变体而不需要知道其结构?

我找到了以下解决方案,可以创建一个宏来定义一个函数,该函数返回 true 如果枚举匹配变体: macro_rules! is_variant { ($name: ident, $enum_type: ty, $enum_pattern: pat) => { fn...

8得票1回答
使用 `quote!` 在向量上进行重复时出现 `ThereIsNoIteratorInRepetition` 结构体错误。

我试图创建一个由TokenStream组成的Vec列表,并在另一个quote!宏中使用该列表: let list: Vec<_> = some_data .iter() .map( |item| { ...

7得票4回答
如何使用 Rust 宏简化数学公式?

我必须承认我对宏有点迷惑。 我想要构建一个宏,完成以下任务, 但不确定如何做。 我想要执行两个数组x和y的标量积, 这两个数组长度相同,为N。 我希望计算的结果形式如下: z = sum_{i=0}^{N-1} x[i] * y[i]. x是一个包含0、1或者-1的常量数组,在编译时已知...

7得票1回答
在声明宏中构建所有元素对(二次集合)

我有一个标识符列表,希望能够为该列表中的每一对标识符调用一个宏。例如,如果我的列表包含a,b和c,那么我想生成如下内容: println!("{} <-> {}", a, a); println!("{} <-> {}", a, b); println!("{} &l...

7得票1回答
"write!宏在使用引用时放在单独的方法中无法编译"

这是我的代码: use std::fs::File; use std::io::Write; fn main() { let f = File::create("").unwrap(); // Compiles write!(&f, "hi").unwra...

7得票2回答
在 Rust 教程代码中出现了 "error[E0599]: no method named write_fmt found" 错误

我试着使用writeln!()而不是println!()宏来向标准输出写入内容,这样我就可以优雅地处理I/O错误(例如当我将长时间运行的输出管道传递到head时)。 我在https://rust-cli.github.io/book/tutorial/output.html#a-note-on...

7得票2回答
如何在宏派生中将字符串连接到标识符?

我需要创建一个宏,其中名称是函数名称的一部分。(此代码不起作用,仅用于显示问题) fn impl_logic(ast: &syn::DeriveInput) -> TokenStream { let name:&syn::Ident = &ast.ide...