12得票2回答
在 Rust 的宏中创建闭包环境

我想实现类似于这样的效果(简化版):macro_rules! atest { ($closure:tt) => { let x = 5; println!("Result is {}", $closure()) }; } fn main(...

12得票1回答
在编译时发出警告?

我希望能在编译时发出警告,可能需要使用宏。这个警告不能被cap_lints静音。目前我的使用场景是功能弃用,但还有其他可能的用途。

11得票1回答
如何在宏中匹配Rust的if表达式?

我试图编写一个宏,以重写特定的Rust控制流,但我很难匹配if表达式。问题在于谓词是一个表达式,但一个expr不允许跟随block或{。 我尽力了,在这里使用tt:macro_rules! branch { ( if $pred:tt $r1...

11得票3回答
如何用零填充数组?

fn main() { let arr: [u8;8] = [97, 112, 112, 108, 101]; println!("Len is {}",arr.len()); println!("Elements are {:?}&quo...

11得票2回答
如何创建类似函数的过程宏?

如何定义a_proc_macro以便它“返回”值为5? fn main() { let a = a_proc_macro!(); assert!(a == 5); }

11得票1回答
由于宏展开忽略了标记“self”,因此无法在宏中使用self。

我想编写一个宏,它会在方法中打印“OK”,然后返回self。这是我第一个宏,所以我尝试了以下内容,认为它只会制作类似文本替换的东西,但它失败了:macro_rules! print_ok_and_return_self { () => { println!("OK...

10得票2回答
有没有一种方法可以在不重复变量名的情况下传递命名参数给格式宏?

在 Rust 的新版本中,你可以像这样简化结构体的初始化: Foo { a: a, b: b, } 转换为: Foo { a, b } 是否可以为format!/println!等宏做类似的事情? 现在我需要这样写: let a = "a"; let b = "...

9得票1回答
如何在过程宏中提供有用的编译器错误信息?

我正在使用proc_macro和syn设计自定义的HTML语法解析器。一个示例: #[derive(Debug)] struct BlockElement { stag: Ident, child: Vec<Element>, ctag: Ident } ...

9得票1回答
通过Rust宏实现自定义字面量?

在Rust中是否可以定义一个宏,用于解析自定义字面量,例如以下内容: vector!(3x + 15y) 为了澄清,我希望能够尽可能地接近上述语法(当然,这在可能的范围内)。

9得票2回答
在纯Rust宏中编写像`print!`这样复杂的内容是否可能?

我开始学习Rust宏,但是文档有些有限。这很好-它们似乎是专家功能。虽然我可以做基本的代码生成、trait 实现等,但一些内置的宏似乎远远超出了这个范围,比如各种 print 宏,它们检查字符串字面量并将其用于代码扩展。 我查看了print!的源代码,它调用另一个名为 format_args...