scala模式匹配

package com.ming.test


/**
 * 模式匹配
 */
object MatchTest {
  
    def main(args: Array[String]): Unit = {
      //match 基本用法
      var sign=3
      var m='w'
      var str='d'
      var digit="dsafdsafdsaf"
      m match{
        case '+' => sign=10
        case '-' => sign=100
        case _ => sign=200
      }
      println(sign)
      sign=m match{case '+' => 1000;case '-' => 10000;case _ => 1231}
      println(sign)
      
      //带有守卫的匹配
      sign=m match{case '+' => 12;case '-' =>23;case _ if Character.isDigit(m) =>2;case _ => 1000000}
      println(sign)
      //类型模式
      //var a=obj match{case x:Int=>x;case s : String => Integer.parseInt(s);case _:BigInt=>Int.MaxValue;case _ => 0}
      
      //数组匹配
      var array=Array(0,2)
      val s=array match{
        case Array(0)=>"0"
        case Array(x,y)=>x+" "+ y
        case Array(0,_*)=>"0 ......"
        case _ =>"something else"
      }
      println(s)
      
      //匹配列表
      val list=List(0,212,3)
      var lst=list match{
        case 0 :: Nil =>"0"
        case x :: y ::Nil => x+" "+ y
        case 0 :: tail => "0...."
        case _ =>"something else"
      }
      println(lst)
      
      //元祖匹配
      val yuanzu=(1,2,0)
      var zu=yuanzu match{
        case (0,_,1) => "0 ..."
        case (y,0,0) => y+"0"
        case _ => "neither is 0"
      }
      println(zu)
      
      //变量中声明中的模式
      val (x,y)=(1,2);
      println(x+y)
      
      //for 表达式中的模式
      for((k,v)<-Map((1,""),(2,3)) if v !="")println(k+"->"+v)

    }
   
}

 

posted @ 2016-12-06 14:44  全力以赴001  阅读(173)  评论(0编辑  收藏  举报