以下代码

macro_rules! test {
    ( $( $x1:expr ),*; blub $( $x2:expr ),* ) => {
        $(
            println!("{} * {} = {}", $x1, $x2, $x1 * $x2);
        )*
    }
}

fn main() {
    test!{1, 2, 3; blub 4, 5, 6};
}

打印:

1 * 4 = 4
2 * 5 = 10
3 * 6 = 18

但是,我希望像嵌套循环一样分别遍历这两个列表.它应该打印:

1 * 4 = 4
1 * 5 = 5
1 * 6 = 6
2 * 4 = 8
2 * 5 = 10
2 * 6 = 12
3 * 4 = 12
3 * 5 = 15
3 * 6 = 18

我该怎么做?

推荐答案

您需要使用某种形式的嵌套循环,因为您需要迭代x2次以上的变量次数.您可以将每个重复的标记分别展开到一个数组中,并像循环任何可迭代集合一样遍历该数组:

macro_rules! test {
    ( $($x1:expr ),*; blub $($x2:expr ),* ) => {
        for x1 in [$($x1),*] {
            for x2 in [$($x2),*] {
                println!("{} * {} = {}", x1, x2, x1 * x2);
            }
        }
    }
}

fn main() {
    test!{1, 2, 3; blub 4, 5, 6};
}

Rust相关问答推荐

在Rust中,有没有一种方法让我定义两个 struct ,其中两个都遵循标准 struct ?

MacOS(AARCH64)上Ghidra中的二进制补丁导致进程终止

无法理解铁 rust &S错误处理

无法从流中读取Redis请求

如何将单个 struct 实例与插入器一起传递到Rust中的映射

不同类型泛型的映射

Tokio';s io::用Cursor拆分<;Vec<;u8>>;赢得';t get the full writted data

如何将带有嵌套borrow /NLL 的 Rust 代码提取到函数中

需要一个有序向量来进行 struct 初始化

部署Rust发布二进制文件的先决条件

打印 `format_args!` 时borrow 时临时值丢失

无法理解 Rust 对临时值的不可变和可变引用是如何被删除的

如何在 Rust 中返回通用 struct

发生移动是因为 `data` 的类型为 `Vec`,它没有实现 `Copy` 特性

Rust - 在线程之间不安全地共享没有互斥量的可变数据

Rust 跨同一文件夹中文件的可见性

火箭整流罩、tokio-scheduler 和 cron 的生命周期问题

您如何使用枚举反序列化字符串,其中任何其他值反序列化为新类型变体同时保留字符串?

返回 &str 但不是 String 时,borrow 时间比预期长

为什么这里需要类型注解?