我想创建一个宏,它将作为参数 ($var:ident, $val:expr)
。宏应该将变量 $var
设置为 $val
的值,克隆它,然后返回克隆。这是我的尝试:
macro_rules! my_macro {
($var:ident, $val:expr) => {{
let $var = $val;
$var.clone()
}}
}
fn main() {
println!("{}", my_macro!(x, 5));
println!("{}", x);
}
它不起作用,因为 let
语句在 block 内。如果我尝试通过将 {{
更改为 {
来解决问题,则会产生语法错误。有什么办法可以解决吗?
最佳答案
没有。
宏不是魔术,它们只是扩展为您可以自己编写的单个表达式/语句/项。无法编写“转义”其定义范围的变量声明。
关于rust - Rust 宏可以设置变量并同时返回值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50205496/