【发布时间】:2020-07-23 00:04:29
【问题描述】:
我是 Rust 的新手,遇到了以下简单的问题
我有以下 2 个枚举:
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
【问题讨论】:
-
您能否举例说明为什么您实际上需要
SourceType枚举?一个常见的 Rust 习惯用法是只有SourceProperties并根据其变体确定类型。 -
由于
SourceType只有两个可能的值,你的hash map只能有零个、一个或两个元素,你想让这两个元素有两个固定的类型。对我来说,这听起来不像是地图,而更像是struct Sources { file: Option<FileProperties>, network: Option<NetworkProperties> }。如果您最多(或恰好)想要哈希映射中的一个元素,您可以简单地使用SourceProperties,如上一条评论中所述。 -
@eggyal 拥有一个单独的
enum SourceType的主要目的是应用程序将接受包含编码为String值的SourceType的用户请求("File",@ 987654341@)。所以我认为有一个单独的enum是明智的,所以工作流程看起来像"File"->SourceType::File->FileProperties。 -
@SvenMarnach 拥有
enum SourceType的原因是它是从用户输入中解码的。所以我认为定义这种类型是很自然的。更新了问题。
标签: enums rust type-safety