scala-モードマッチングとサンプルクラス

10398 ワード

パターンマッチングとサンプルクラス
  • モードマッチング
  • より良いswitch
  • 守備
  • 配列、リスト、およびメタグループ
  • に一致する
  • サンプルクラス
  • パターンマッチング
    より良いswitch
    scalaには、switch文、タイプクエリ、および「プロファイル」(複雑な式の異なる部分を取得)に適用できる非常に強力なモードマッチングメカニズムがあります.
    object Test {
      def main(args: Array[String]): Unit = {
        println(matchTest('-'))
      }
    
      def matchTest(x:Char):Int = x match {
        case '+' => 1
        case '-' => -1
        case _ => 0
      }
    }
    
    1、match  java  switch
    2switch    。scala     “         ”
    3=>4、          ,   MatchError。   case_      。
    5if  ,match    ,    
    

    ガード
    すべての数字に一致するガードを追加します.
    // Character.digit(ch,radix)  radix     ch        
    //        Boolean  
    //             
    object Test {
      def main(args: Array[String]): Unit = {
        println(matchTest('-'))
        println(matchTest('2'))
      }
    
      def matchTest(ch:Char):Int = ch match {
        case '+' => 1
        case '-' => -1
        case _ if Character.isDigit(ch) => Character.digit(ch,10)
        case _ => 0
      }
    }
    

    配列、リスト、およびメタグループの一致
    一致配列配列配列配列配列の内容を一致させるには、パターンでArray式を使用します.
    object Test {
      def main(args: Array[String]): Unit = {
        println(matchTest(Array(0)))
        println(matchTest(Array(0,1)))
        println(matchTest(Array(0,1,2)))
        println(matchTest(Array(1,2,3)))
      }
    
      def matchTest(arr:Array[Int]):String = arr match {
        case Array(0) => "0"             //     0   
        case Array(x,y) => x + " " + y   //             ,              x y
        case Array(0,_*) => "0 ..."     //     0     
        case _ => "something else"
      }
    }
    //      :
    0
    0 1
    0 ...
    something else
    

    一致リスト一致メタグループ
    サンプルクラス
    サンプルクラス対モードマッチングで最適化