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

时间:2025-04-20

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文档下载到电脑

精彩图片

热门精选

大家正在看

× 游客快捷下载通道(下载后可以自由复制和排版)

限时特价:7 元/份 原价:20元

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:fanwen365 QQ:370150219