概要
所谓模式匹配下的提取器,就是模式匹配与提取器的结合。
关于提取器可以参考scala 中的 提取器
示例代码
这里主要是通过 object 对象的 unapply 在模式匹配的应用
object :>{ //定义提取器 :>
def unapply[A](list:List[A]) = {
Some(list.init,list.last)
}
}
object Extractor_Pattern_Match {
def main(args: Array[String]) {
(1 to 9).toList match { case :>(_,9) => println("aa")}
(1 to 9).toList match { case _ :> 9 => println("spark")}
(1 to 9).toList match { case x :> 8 :>9 => println("hadoop") }
(1 to 9).toList match { case :>(:>(_,8),9)=>println("flink")}
}
}
过程分析
- 当进行匹配时,调用提取器(:>) 的方法 unapply方法,
输入参数:(1 to 9).toList
输出参数:Some(list.init,list.last) (这里结果为((1 to 8),9) 然后用输出参数与 case 语句比较
如 case :>(_,9) => println(“aa”) ,发现最后一个元素为9 ,满足要求 直接打印,就这个例子可以理解为
参入参数 必须是list 类型,同时要求 此list的最后一个元素为9小技巧:
scala :表示是 右结合
- :>( _,9) 与 _ :> 9 写法的功能相同
参考资料:
百度网盘:http://pan.baidu.com/share/home?uk=4013289088#category/type=0
微信号:18610086859
DT大数据微信公众账号:DT_Spark
DT大数据梦工厂交流群:462923555/418110145/437123764