scalaモードマッチング

1606 ワード

これはScalaの中で最も有用な部分の一つです.
一致値
val times = 1

times match {
  case 1 => "one"
  case 2 => "two"
  case _ => "some other number"
}
 
ガードを使用した照合
times match {
  case i if i == 1 => "one"
  case i if i == 2 => "two"
  case _ => "some other number"
}
 
変数’i’に値をどのように割り当てるかに注意してください.
最後の行の命令の_はワイルドカードである.それは私たちがすべての状況を処理できることを保証します.そうでなければ、一致しない数字が伝わると、実行時エラーが表示されます.私たちはこれからこの話を続けます.
Effective Scalaは、いつモードマッチングとモードマッチングフォーマットを使用するかを提案する.A Tour of Scalaもモードマッチングを記述している
照合タイプmatchを使用して、異なるタイプの値をそれぞれ処理できます.
def bigger(o: Any): Any = {
  o match {
    case i: Int if i < 0 => i - 1
    case i: Int => i + 1
    case d: Double if d < 0.0 => d - 0.1
    case d: Double => d + 0.1
    case text: String => text + "s"
  }
}
 
クラスメンバーの照合
私たちの前の計算機を覚えていますか.
タイプによって分類しましょう.
最初はつらいです.
def calcType(calc: Calculator) = calc match {
  case _ if calc.brand == "hp" && calc.model == "20B" => "financial"
  case _ if calc.brand == "hp" && calc.model == "48G" => "scientific"
  case _ if calc.brand == "hp" && calc.model == "30B" => "business"
  case _ => "unknown"
}
 
ああ、苦しい.幸いなことに、Scalaはこのような状況に対応する有効なツールを提供しています.