给定以下元组赋值:
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);
关于macros - 可以使用宏扩展为构造函数元组吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41969714/