我有一个元组结构枚举变体,如下所示:
enum Message {
ChangeColor(u8, u8, u8),
// ...
}
稍后,我有一个 match
构造来检测变量是否属于 ChangeColor
子类型。
match message {
Message::ChangeColor(r, g, b) => self.change_color((r, g, b)),
// ...
}
change_color
的签名是change_color(&mut self, color: (u8, u8, u8))
。有什么方法可以将 message
的值直接传递给 self.change_color
,方法是将其强制转换为等效的元组类型,或者我是否需要解构 message
然后构建一个新的元组传递给 change_color
?
我并不关心性能。我读到编译器知道如何直接传递 message
而不是先将值逐字复制到新元组。我更关心人体工程学。我真的必须在那里重复自己并可能输错某些内容并引入错误或错误吗?
最佳答案
我看到有两种方法可以回答这个问题。
对于编写的
enum
-定义,您确实需要进行显式解构和随后的元组构造。一个简单的原因:该语言不保证Message::ChangeColor
中字段的布局与(u8, u8, u8)
的布局相匹配。因此,从这个角度来看,您不能将Message::ChangeColor
负载转换成它自己的元组是有道理的。如果您真的不想重复解构和重组,并且愿意略微修改您的
enum
-definition,那么我推荐您像这样定义你的enum
:
enum Message {
ChangeColor((u8, u8, u8)), // note the extra set of parentheses.
// ...
}
有了这个,您现在可以匹配枚举包含的元组,并将那个传递给self.change_color
。 Demo playground code
关于struct - 我可以将元组结构枚举变体转换为常规元组而不是解构和重新创建元组吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58884841/