您的位置:首页 > 其它

scala学习之模式匹配

2015-09-07 22:26 225 查看
模式匹配下的for循环:
(1)Scala中最基本的For循环表达式和Java是一样的,For表达式的背后是通过foreach方法来实现的。

(2)同时在scala中有变量绑定的概念,我们可以为变量i绑定集合中得一个元素。

(3)在Scala中,通过使用For循环中的模式匹配,可以筛选过滤出集合中的元素
代码示例:
for(i <- 1 to 5)(println(i))
for(index@"FLink" <- List("Hadoop","Spark","Flink")){println(index)}

for((language,"Hadoop") <- Set("Scala"->"Spark","Java"->"Hadoop"))println(language)

for((k,v:Int) <- List(("Spark"->5),("Hadoop"->"Big Data"))){println(k)}
模式匹配下的赋值
(1)val a@b = 1000 指的是a、b两个变量绑定到了1000上,并产生了一个二元组记录这两个局部变量值。最终把二元组里的值分别赋给了我们定义的a,b两个变量。
(2)val (c,d)=(1000,2000) 指的是把二元组(1000,2000)中的指分别赋值给c和d 。
(3)val (e,F) = (1000,2000) 中当变量F大写时将被对待为常量模式,也就是说大写F和小写f是两种不同的模式。
(4)object Test { val 1 = 1 } 是一个常量模式匹配,1匹配1,成功。 object Test { val 1 = 2 } 也是个常量模式匹配,但由于object是惰性初始化的原因(lazy),虽然明显不匹配,却可以编译时成功,只是在运行时才报错。
模式匹配下的提取器
(1)在最常用的场景下,提取器是构造器的反操作:构造器根据参数列表构造一个对象实例,而提取器从一个现有对象实例中将构造时的参数提取出来。
(2)unapply方法的目的是提取我们寻找一个特定的值。它相反的操作和apply一样。当比较使用匹配语句中unapply方法的提取对象将被自动执行。
:> 是提取器的名称,提取器中最关键的方法是unapply方法。
代码示例:

object :> {
def unapply[A](list: List[A])={
Some((list.init,list.last))
}
}
object Extractor_Advanced {
def main(args: Array[String]): Unit = {
(1 to 9).toList match{case _ :> 9 => println("Hadoop")}
(1 to 9).toList match{case x :> 8 :> 9 => println("Spark")}
(1 to 9).toList match{case :>(:>(_,7),9) => println("Flink")}
}
}

以上内容是从王家林老师DT大数据课程第75-77讲的学习笔记。

DT大数据微信公众账号:DT_Spark

王家林老师QQ:1740415547

王家林老师微信号:18610086859

百度云盘地址:http://pan.baidu.com/s/1dD10KFZ

优酷播放地址:http://v.youku.com/v_show/id_XMTMwMDcxNzY4MA==.html

51cto的播放地址:http://edu.51cto.com/lesson/id-70545.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: