rust - 如何根据传入的枚举值使结构实例具有不同类型的字段?
问题描述
我想为结构创建不同的“风味”。这意味着根据我传递给结构的构造函数的枚举,我将获得一个结构版本,其“风味”特征的类型取决于该枚举值。我知道我必须为结构的字段指定单一类型,但是如果我希望根据传递给构造函数的值更改该类型怎么办?我只能使用特征做这样的事情吗?
pub struct ChocolateFlavor {
coco: u32,
}
pub struct VanillaFlavor {
bean: u32,
}
pub struct IceCream {
flavor: (), //should be able to be ChocholateFlavor or VanillaFlavor
}
pub enum Flavors {
Vanilla,
Chocholate,
}
impl IceCream {
pub fn new(input_type: Flavors) -> Self {
match input_type {
Flavors::Vanilla => input = VanillaFlavor,
Flavors::Chocholate => input = ChocolateFlavor,
}
let mut new_icecream = LabeledInput { flavor: input };
new_icecream
}
}
fn main() {
//give me a chocholate ice cream
let mut my_chocholate = IceCream::new(Flavors::Chocolate);
//give me a vanilla ice cream
let mut my_vanilla = IceCream::new(Flavors::Vanilla);
}
解决方案
您可以使用带有值的枚举
enum FlavorData {
ChocolateFlavor { coco: u32 },
VanillaFlavor { bean: u32 },
}
pub struct IceCream {
flavor: FlavorData,
}
pub enum Flavors {
Vanilla,
Chocolate,
}
impl IceCream {
pub fn new(input_type: Flavors) -> Self {
let flavor = match input_type {
Flavors::Vanilla => FlavorData::VanillaFlavor { bean: 10 },
Flavors::Chocolate => FlavorData::ChocolateFlavor { coco: 20 },
};
IceCream { flavor: flavor }
}
}
fn main() {
//give me a chocholate ice cream
let mut my_chocolate = IceCream::new(Flavors::Chocolate);
//give me a vanilla ice cream
let mut my_vanilla = IceCream::new(Flavors::Vanilla);
}
推荐阅读
- javascript - 如何记录用户关闭烧瓶视图的时间?
- css - 如何在 React 中为伪类动态添加 CSS 样式
- android-studio - 网站抓取html类识别问题
- r - 用于 3D PCA 的 R 包(分数图和载荷图(箭头))?
- mysql - docker mysql 卷组成连接错误
- c# - 如何在 C# 中以编程方式保存用户使用 CTRL-C 复制到剪贴板的 Outlook 电子邮件附件(例如 PDF)
- python - 使用部分 python 函数的结果并存储在函数外部的变量中
- reactjs - 如何在 iphone React Native 中检测回扫事件
- go - JSON marshal 返回不正确的 utf8 泰铢货币字符 ฿
- php - 我无法在 laravel 中获取更新的选项值