scalaモードマッチング
1606 ワード
これはScalaの中で最も有用な部分の一つです.
一致値
ガードを使用した照合
変数’i’に値をどのように割り当てるかに注意してください.
最後の行の命令の
Effective Scalaは、いつモードマッチングとモードマッチングフォーマットを使用するかを提案する.A Tour of Scalaもモードマッチングを記述している
照合タイプ
クラスメンバーの照合
私たちの前の計算機を覚えていますか.
タイプによって分類しましょう.
最初はつらいです.
ああ、苦しい.幸いなことに、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はこのような状況に対応する有効なツールを提供しています.