macros - 可以使用宏扩展为构造函数元组吗?

标签 macros rust

给定以下元组赋值:

let (a, b, c, d) = (Item::new(1), Item::new(10), Item::new(100), Item::new(1000));

这是否可以简化,以便可以删除构造函数并将其制成宏。例如:

let (a, b, c, d) = item_tuple!(1, 10, 100, 1000);

从递归宏的角度来看,似乎每个宏实例化都需要创建一个有效的元组,因此宏会创建元组对,例如:let (a, (b, (c, d))) = 。 ..; ( see this example ).

是否可以编写一个扩展为构造函数的平面元组的宏?

最佳答案

您可以在您的宏中接受可变参数并通过调用 Item::new() 来扩展它,如下所示:

macro_rules! item_tuple {
    ($($arg:expr),*) => {
        (
            $(Item::new($arg),)*
        )
    }
}

使用此宏,此调用将按预期工作和运行:

let (a, b, c, d) = item_tuple!(1, 10, 100, 1000);

Playground link

关于macros - 可以使用宏扩展为构造函数元组吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41969714/

相关文章:

rust - Rust 中的泛化迭代方法

reference - 在 Rust 中借用和返回可变引用的优雅方式

http - 如何从 Rust 发送超过 65535 个符号的 GET 请求?

c++ - 自动注册新的派生类/创建者方法

c++ - 如何让预处理器在宏扩展结果中插入换行符?

c++ - clang-format:宏的缩进

c - x-macro 条件错误 - 数字比较

rust - 创建 Vec 时,借用的值不够长

file - 试图让 Rust 加载文件

c - 无与伦比的括号宏怪异