作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我是Rust的新手,面临以下简单问题
我有以下两个枚举:
enum SourceType{
File,
Network
}
enum SourceProperties{
FileProperties {
file_path: String
},
NetworkProperties {
ip: String
}
}
现在,我想拥有
HashMap<SourceType, SourceProperties>
,但是在这样的实现中,有可能具有映射
File -> NetworkProperties
的潜力,这不是预期的。
enum SourceProperties<T>
参数化
SourceType
,但似乎不可能。有没有办法提供这种类型安全保证?
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/
我是一名优秀的程序员,十分优秀!