package com.scode.scala import scala.Range /** * author: Ivy Peng * function: 模式匹配实战 * date:2016/04/1 7:00 * * 赋值语句、for循环与提取器下的模式匹配 */ /* * 提取器:提取 List中 最后一个,与其他所有剩余元素 */ object :> { def unapply[A](list:List[A])= //<span style="color:#ff0000;">这里,"=" 是必须的,否则第 21行编译时报错 "</span>an unapply result must have a member `def isEmpty: Boolean" 。这里有//待后续进一步理解 { Some((list.init,list.last)) } } object ForEnhancer { def main(args: Array[String]): Unit = { patter_match_assigment patter_match_for patter_abstractor } /** * 赋值语句与模式匹配 */ def patter_match_assigment { val a@b = 1000 println("a="+a +"b=" +b) val (c,d)=(1000,2000) // val (e,D)=(1000,2000) D为编译器看做常量 val Array(g,h) = Array(19,2) object Test{val 1=1} object Test2{val 2=1} // lazy级别的->编译时不会报错,运行时报错 } /** * for循环与模式匹配 */ def patter_match_for { for(i<- List(1,2,4,4)){println _ } //给变量index一个别名 for(index@"Flink" <- List("Hadoop","Spark","Flink")) {print(index + " ")} //过滤第二个元素是 Hadoop字符串的元组 for((language,"Hadoop") <- Set("scala"->"Spark","java"->"Hadoop")){println(language)} //过滤第二个元素为整数的元组 for((k,v:Int)<- List(("Spark"->5),("Hadoop"->6),("Flink"-> "Nice"))) println(v) } /** * 提取器与模式匹配 * 1、"_"可以表示一个元素:一个字符,或者一个集合等 * 2、提取器语法: Value 提取器 Value 或者 提取器(Value,Value) */ def patter_abstractor { (1 to 9) toList match{ case _:>9 => println("Hadoop")} (1 to 9) toList match{ case :>(_,9) => println("Hello,World !")} Range(1,10) toList match{ case _ :> 8 :> 9 => println("Spark")} (1 to 9) toList match {case :>(:>(_,8),9)=> println("Flink")} } }
a=1000 b=1000
Flink java
5
6
Hadoop
Hello,World !
Spark
Flink