有没有办法在Rust宏中引用局部变量?
我想使用宏生成函数体,但要这样做,它们需要访问局部范围内的变量: 宏规则!生成函数{ $name:ident=>{ fn$nameparam:i32{ 生成你的身体! } }; } 宏规则!生成实体{ => { println!{},¶m; } } 生成函数!傅; 错误[E0425]:在此范围内找不到值'param' ->src/lib.rs:11:25 | 11 | println!{},¶m; |在此作用域中找不到^ ... 15 |生成函数!傅; |------------在此宏调用中 | =注意:此错误源于夜间生成中的宏,有关详细信息,请使用-Z宏反向跟踪运行 这不起作用非常令人沮丧,因为我可以运行cargo expand并查看结果代码是否有效: fn fooparam:i32{ { ::std::io::_print::core::fmt::Arguments::new_v1&[,\n], &匹配和参数(&P){ arg0,=> [::core::fmt::ArgumentV1::newarg0, ::核心::fmt::显示::fmt], }; } } 这有点乱,因为println!,但是您可以在那里看到有效的引用 我甚至可以复制并粘贴扩展到我的源代码中,编译器接受它。当然有办法达到预期的结果吗 这似乎大致与: 但我不能确定我是否有完全相同的问题;我的情况似乎更基本。Rust宏是,它可以防止标识符从一个作用域泄漏到另一个作用域并造成各种形式的混乱。但您可以通过将参数从generate_func传递到generate_body来解决这个特殊问题: 请参见。Rust宏是,它可以防止一个作用域中的标识符泄漏到另一个作用域中并造成各种形式的混乱。但您可以通过将参数从generate_func传递到generate_body来解决这个特殊问题: 在电视上看到它有没有办法在Rust宏中引用局部变量?,rust,macros,Rust,Macros,我想使用宏生成函数体,但要这样做,它们需要访问局部范围内的变量: 宏规则!生成函数{ $name:ident=>{ fn$nameparam:i32{ 生成你的身体! } }; } 宏规则!生成实体{ => { println!{},¶m; } } 生成函数!傅; 错误[E0425]:在此范围内找不到值'param' ->src/lib.rs:11:25 | 11 | println!{},¶m; |在此作用域中找不到^ ... 15 |生成函数!傅; |------------
macro_rules! generate_func {
($name:ident) => {
fn $name(param: i32) {
generate_body!(param)
}
};
}
macro_rules! generate_body {
($param:ident) => {
println!("{}", &$param);
}
}
generate_func!(foo);