手机版

第4课:Scala模式匹配、类型系统彻底精通与Spar(2)

发布时间:2021-06-07   来源:未知    
字号:

Scala模式匹配Scala类型系统Spark源码阅读

Source.fromFile(file).getLines()

}catch{

case e1: FileNotFoundException => println("FileNotFoundException")

case e2: RuntimeException => println("RuntimeException")

case e3: Exception => println("Exception")

}

因为匹配是发生在运行期的,而且JVM中泛型的类型信息会被擦掉,因此不能使用类型来匹配特定的Map类型

四:匹配数组、列表和元组

1)数组

val arr = Array(0,3,4,5,6,7)

arr match {

case Array(0) => "0"

case Array(x, y) => x + " " + y

case Array(0, x @_*) => println(x)

case _ => "something else"

}

2) 列表

val arr = List(0,4,5,6,7,)

arr match {

case List(0) => "0"

case List(x, y) => x + " " + y

case List(0, x @_*) => println(x)

case _ => "something else"

}

或者

arr match {

case 0 :: Nil => "0"

case x :: y :: Nil => x + " " + y

case 0 :: tail => "0 ..."

case _ => "something else"

}

五:提取器

模式匹配来对数组、列表和元组进行了匹配,在这个过程的背后的是提取器(extractor)机制。使用unapply来提取固定数量的对象,使用unapplySeq来提取一个序列。在前面的代码 case Array(0, x) => ...中, Array(0, x)部分实际上是使用了伴生对象中的提取器,实际调用形式是: Array.unapplySeq(arr)。根据Doc,提取器方法接受一个Array参数,返回一个Option。

1)正则表达式是另一个适用提取器的场景。正则有分组时,可以用提取器来匹配分组

val pattern = "([0-9]+) ([a-z]+)".r

"99 bottles" match {case pattern(num, item) => (num, item)}

第4课:Scala模式匹配、类型系统彻底精通与Spar(2).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印
×
二维码
× 游客快捷下载通道(下载后可以自由复制和排版)
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能出现无法下载或内容有问题,请联系客服协助您处理。
× 常见问题(客服时间:周一到周五 9:30-18:00)