scala (8) 模糊匹配


object MatchDemo {
  /**
    * 定義偏函數用PartialFunction來表示
    * PartialFunction[T1,T2]要求傳入一個參數T1,T2代表返回的類型。
    * 偏函數體中的case只會執行一個,如果匹配到了就不會繼續往下匹配
    */
  val func: PartialFunction[String, Int] = {
    case "a" => 1
    case "b" => 2
    case _ => -1
  }

  /**
    * 匹配字符串
    */
  def m1(str: String) = str match {
    case "a" => 1
    case "b" => 2
    case _ => -1
  }

  /**
    * 匹配類型
    */
  def m2(x: Any) = x match {
    // 匹配字符串
    case x: String => println(x)
    // 帶if守衛條件的匹配
    case x: Int if x > 5 => println(x)
    case _ => println("unknonw")
  }

  /**
    * 匹配數組
    */
  def m3(arr: Array[Int]) = arr match {
    case Array(1, x, y) => println("匹配以1開頭,有三個元素的數組")
    case Array(0) => println("匹配只有0這個元素的數組")
    case Array(0, _*) => println("匹配以0開頭,任意多個元素的數組")
    case _ => ("unknown")
  }

  /**
    * 匹配序列 List
    */
  def m4(list: List[Int]) = list match {
    case 5 :: Nil => println("匹配只有5這個元素的序列")
    case x :: y :: Nil => println("匹配只有兩個元素的序列")
    case x :: tail => println("匹配任意多個元素的序列")
    case _ => println("unknown")
  }

  /**
    * 匹配元組
    */
  def m5(tuple: Any) = tuple match {
    case (x, z, 7) => println("匹配有三個元素並且以7結尾的元組")
    case (2, x, y) => println("匹配以2開頭有三個元素的元組")
    case _ => println("unknown")
  }

  def main(args: Array[String]): Unit = {
    println(func("c"))
    println(m1("a"))
    m2(6)
    m3(Array(0, 1, 2, 3, 4, 5, 6))
    m4(List(5, 6, 7))

  }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM