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

标签 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);
}

它不起作用,因为 let 语句在 block 内。如果我尝试通过将 {{ 更改为 { 来解决问题,则会产生语法错误。有什么办法可以解决吗?

最佳答案

没有。

宏不是魔术,它们只是扩展为您可以自己编写的单个表达式/语句/项。无法编写“转义”其定义范围的变量声明。

关于rust - Rust 宏可以设置变量并同时返回值吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50205496/

相关文章:

oop - 有没有办法将 Trait 实现和防御拆分到不同的模块中?

rust - 为什么我不能将 `&Iterator<Item = &String>` 用作迭代器?

rust - 为什么我需要在比较变量时取消引用变量而不是在进行算术运算时?

rust - 关于 Rust 的函数参数和所有权的一个小问题

rust - Rust 中的生命周期如何为函数工作?

c# - 如何让 Rust FFI 返回结构数组或更新内存?

struct - 为什么 sizeof::<Struct>() 不等于其字段大小的总和?

java - 有没有一种简化的方法来从 Rust 调用 Java 函数?

postgresql - 带有 Rocket 和 Diesel 的 Multi-Tenancy Web 应用程序

logging - 如何使用 log4rs 更改正在运行的进程的日志级别?