Scala_(4)_模式匹配

本文介绍了Scala中的模式匹配概念及应用,包括基本的模式匹配、类型匹配、集合匹配及Case Class的使用,并探讨了Scala的类型系统,涉及泛型类、泛型函数、上边界、下边界、试图界定等高级特性。
一、Scala模式匹配
源码:Master
①def bigdata(data:String){
data match{
case "Spark" => print("")
case "Hadoop" =>print("")
case _ => print("")
}
}
②def bigdata(data:String,age:Int){
data match{
case "Spark" => print("")
case "Hadoop" =>print("")
case _ if data == "Flink" => print("" + data_ ) // 或者 case data_ if data_ == "Flink" => print("")
case _ =>print()
}
}
与Java模式匹配的不同:
Scala的模式匹配可以匹配类型
③def exception(e:Exception){
e match{
case fileException:FileNotFoundException => print("")
case _:Exception =>println()
}
}
④可以对集合进行匹配
def data(array:Array[String]){
array march{
case Array("Scala") =>print()
case Array(Spark,hadoop) => print() // 指定个数的匹配
case Array("Spark",_*)=> print()// 匹配Spark开头的元素
case _ => print()
}
}
注:集合中的模式匹配,经常会用到Some和None

⑤Case Class 模式匹配
case class Person(name : String) // 相当于Java的Javabean

Class Person()
case class Worker(name:String,salary:Double) extends Person
case class Student(name:String,age:Int) extends Person
def sayHi(person: Person){
case Student(name,score) =>print()
case Worker(name,salary)=>print()
case _ => print()
}

case class 与class object的区别:
case class 实际工作时会生成很多实例
case object 本身就是实例

二、Scala类型系统
泛型类:
定义:class Person[T](val content: T){
def getContent(id: T) = id + "_" + content
泛型函数:
定义:泛型类定义中的泛型函数
上边界:
RDD源码:
def saveAsTextFile(path:String,codec:[_ <: CompressioonCodec])//CompressioonCodec类型或者其子类型
下边界:
类型及其父类型
View Bounds:试图界定,有隐式转换
语法:<%
对类型进行隐式转换
源码:SparkContext
class Compare[T:Ordering](val n1:T,val n2:T){
def bigger(implicit ordered:Ordering[T]) = if(ordered,compare(ni1,n2) > 0) n1 else n2
}
new Compare[Int](1,2).bigger()
Manifest Context Bounds:
[T: Manifest] 演化成classTag
斜变:
class Person[+T] // 父类和子类之间,作为类型参数的类也会构成父类和子类
逆变:

[_]:存在类型,可以代表任何类型,如Dependency[_]相当于dependency[T]
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值