或模式
当多个分支存在共享数据且处理逻辑相同时,单独处理会显得冗余。例如,本示例定义枚举类型RGB
和用于提取绿色通道值的get_green
函数。
通过或模式可将RGB
和RGBA
分支合并处理。在或模式中,子模式可引入新变量,但所有子模式的变量必须类型相同且命名一致,该限制确保后续能统一处理这些变量。
enum Color {
Blue
Red
Green
RGB(Int, Int, Int)
RGBA(Int, Int, Int, Int)
} derive(Show)
fn get_green(color : Color) -> Int {
match color {
Blue | Red => 0
Green => 255
RGB(_, g, _) | RGBA(_, g, _, _) => g
}
}
fn main {
println("The green part of Red is \{get_green(Red)}")
println("The green part of Green is \{get_green(Green)}")
println("The green part of Blue is \{get_green(Blue)}")
println("The green part of RGB(0,0,0) is \{get_green(RGB(0,0,0))}")
println("The green part of RGBA(50,5,0,6) is \{get_green(RGBA(50,5,0,6))}")
}