Rust宏可以设置变量并同时返回一个值吗?

aea*_*cve 4 rust

我想创建一个宏作为参数($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);
}
Run Code Online (Sandbox Code Playgroud)

它不起作用,因为let语句在块内.如果我试图通过改变来解决问题{{{,然后它会产生一个语法错误.有什么方法可以解决这个问题吗?

DK.*_*DK. 5

没有.

宏不是魔术,它们只是扩展为您可以自己编写的单个表达式/声明/项目.没有办法编写一个"转义"它定义的范围的变量声明.