【问题标题】:How to generate a vec of enum options in Rust [duplicate]如何在 Rust 中生成枚举选项的 vec [重复]
【发布时间】:2021-09-26 07:51:34
【问题描述】:

有没有办法通过迭代 Rust 中的枚举来完成以下操作。

enum ProductCategory{
    Dairy,
    Daycare,
    BabyCare
}

fn main() {

    let product_categories = vec![ProductCategory::Dairy, ProductCategory::Daycare, ProductCategory::BabyCare];

}

这通过 api 发送用户可以为特定字段选择的所有可能值。 (serde serialize will be added)

【问题讨论】:

    标签: rust


    【解决方案1】:

    使用strum crate 的简单示例。

    let product_categories: Vec<_> = ProductCategory::iter().collect();
    

    使用这个 crate,您可以迭代枚举的变体,将它们转换为/从字符串表示形式转换,将字符串元数据与变体相关联,等等...

    完整的例子:

    use strum::{IntoEnumIterator, EnumIter};
    
    #[derive(Debug, EnumIter)]
    enum ProductCategory {
        Dairy, Daycare, BabyCare,
    }
    
    fn main() {
        let product_categories = ProductCategory::iter().collect::<Vec<_>>();
        println!("{:?}", product_categories);
    }
    

    输出:

    [Dairy, Daycare, BabyCare]
    

    添加到Cargo.toml

    [dependencies]
    strum = { version = "0.21", features = ["derive"] }
    

    【讨论】:

    • 您的回答与stackoverflow.com/a/55056427/7076153 有何不同?
    • 它显示了.collect() 的用法,以回答这篇文章的具体标题“生成枚举选项的 vec”。另一个示例只是迭代它们@Stargateur
    猜你喜欢
    • 2021-01-04
    • 1970-01-01
    • 2019-11-10
    • 1970-01-01
    • 2021-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多