MoonBit 语言导览 MoonBit

或模式

当多个分支存在共享数据且处理逻辑相同时,单独处理会显得冗余。例如,本示例定义枚举类型RGB和用于提取绿色通道值的get_green函数。

通过或模式可将RGBRGBA分支合并处理。在或模式中,子模式可引入新变量,但所有子模式的变量必须类型相同且命名一致,该限制确保后续能统一处理这些变量。

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))}")
}