gpt4 book ai didi

rust - 如何在 Vec 中获取枚举的所有变体?

转载 作者:行者123 更新时间:2023-12-03 23:38:19 31 4
gpt4 key购买 nike

我想知道如何为任何枚举实现一个方法,该方法将返回 Vec<T> 中的所有变体或某种集合类型。就像是:

pub enum MyEnum {
EnumVariant1
EnumVariant2
...
}

impl MyEnum {
fn values(&self) -> Vec<MyEnum> {
// do Rust stuff here
}
}

最佳答案

没有智能和标准的解决方案。
一个明显的方法是通过重复变量来自己声明数组:

static VARIANTS: &[MyEnum] = &[
MyEnum::EnumVariant1,
MyEnum::EnumVariant2,
];
这是一个合理的解决方案。当您的代码演变时,您经常会发现您不希望静态数组中的所有变体。或者你需要几个数组。
或者,如果有很多元素或多个枚举,您可以为此创建一个宏:
macro_rules! make_enum {
(
$name:ident $array:ident {
$( $variant:ident, )*
}
) => {
pub enum $name {
$( $variant, )*
}
static $array: &[$name] = &[
$( $name::$variant, )*
];
}
}

make_enum! (MyEnum VARIANTS {
EnumVariant1,
EnumVariant2,
});
make_enum!宏调用将创建枚举和名为 VARIANTS 的静态数组。 .

关于rust - 如何在 Vec<T> 中获取枚举的所有变体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68025264/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com