gpt4 book ai didi

enums - 如何在 rust 中参数化枚举器?

转载 作者:行者123 更新时间:2023-12-03 11:28:55 24 4
gpt4 key购买 nike

我是Rust的新手,面临以下简单问题
我有以下两个枚举:

enum SourceType{
File,
Network
}

enum SourceProperties{
FileProperties {
file_path: String
},
NetworkProperties {
ip: String
}
}
现在,我想拥有 HashMap<SourceType, SourceProperties>,但是在这样的实现中,有可能具有映射 File -> NetworkProperties的潜力,这不是预期的。
我正在考虑以某种方式用 enum SourceProperties<T>参数化 SourceType,但似乎不可能。有没有办法提供这种类型安全保证?
UPD:拥有 enum SourceType的意图是,实际的 SourceType是用户输入,将被解码为 String值( "File""Network")。所以工作流程看起来像这样
"File" -> SourceType::File -> SourceProperties::NetworkProperties

最佳答案

您可以简单地使用一个哈希集和一个封装属性的enum,以便它们稍后进行匹配:

use std::collections::HashSet;

#[derive(PartialEq, Eq, Hash)]
struct FileProperties {
file_path: String
}

#[derive(PartialEq, Eq, Hash)]
struct NetworkProperties {
ip: String
}

#[derive(PartialEq, Eq, Hash)]
enum Source {
File(FileProperties),
Network(NetworkProperties)
}

fn main() {
let mut set : HashSet<Source> = HashSet::new();
set.insert(Source::File(FileProperties{file_path: "foo.bar".to_string()}));
for e in set {
match e {
Source::File(properties) => { println!("{}", properties.file_path);}
Source::Network(properties) => { println!("{}", properties.ip);}
}
}
}
Playground

关于enums - 如何在 rust 中参数化枚举器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63044870/

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