【发布时间】:2021-11-16 15:36:30
【问题描述】:
我正在编写一些基本的生物信息学代码来将 DNA 转录为 RNA:
pub enum DnaNucleotide {
A,
C,
G,
T,
}
pub enum RnaNucleotide {
A,
C,
G,
U,
}
fn transcribe(base: &DnaNucleotide) -> RnaNucleotide {
match base {
DnaNucleotide::A => RnaNucleotide::A,
DnaNucleotide::C => RnaNucleotide::C,
DnaNucleotide::G => RnaNucleotide::G,
DnaNucleotide::T => RnaNucleotide::U,
}
}
有没有办法让编译器也在match 语句的右侧 一侧进行详尽检查,基本上确保两个枚举之间的1-1 映射?
(一个相关问题:上面可能用某种双射映射更好地表示,但我不想失去穷举检查。有更好的方法吗?)
【问题讨论】:
-
我知道您想进行一些健全性检查,但最终正确编程是程序员的工作。执行详尽检查的最佳方法是编写该死的单元测试。
-
这不是一个很好的态度。在 Rust 世界中,我们试图避开那种老派的“不要写错误代码,呵呵”的心态。让编译器尽早发现错误是件好事。单元测试通常需要一个重复的逻辑,在两个不同的地方编码相同的需求。
-
我不知道是否有可能在编译时捕捉到这一点,但这是一个公平的问题。如果答案是“做不到”,我们可以这样说,不会不屑一顾,是吗?
标签: rust enums one-to-one