枚举迭代

4

我正在尝试使用Rust构建一个简单的牌组生成器。由于我刚接触这门语言,所以还没有完全掌握。

我想要迭代枚举类型Suits和Values,创建一个Card结构体,并将其推入Deck的cards向量中。

到目前为止,我尝试使用静态枚举并像这样迭代它:

        static SUITE_ITER: [Cards::Suits; 4] = [
          Cards::Suits::HEARTS,
          Cards::Suits::CLUBS, 
          Cards::Suits::DIAMONDS,
          Cards::Suits::SPADES
        ];
        for suit in SUITE_ITER.into_iter() {...}

然而,我收到了这个错误信息,但我并不完全理解。有什么提示吗?

无法移动静态项SUITE_ITER。移动发生的原因是SUITE_ITER具有类型[Suits; 4],它没有实现Copy trait。


使用 for suit in &SUITE_ITER { ... } - Jmb
enum Suits 的定义前面添加 #[derive(Copy)] - user4815162342
2个回答

4

默认情况下,枚举值是不能被 复制 的。如果你想要让一个类型可“复制”,通常可以通过使用 Copy 过程宏并注解它来实现,例如 #[derive(Copy)]。作为替代方案,你可能想要使用对这些值的 引用

你的代码使用了 into_iter。我建议你阅读 这篇文章

你也可以查看 strum crate,并阅读 这篇文章 以获取更多信息。


1
您可以迭代引用到SUITE_ITER数组中。例如:
static SUITE_ITER: [Cards::Suits; 4] = [
    Cards::Suits::HEARTS,
    Cards::Suits::CLUBS,
    Cards::Suits::DIAMONDS,
    Cards::Suits::SPADES,
];

for suit in &SUITE_ITER {
    // ...
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接