Spark之Scala学习之路(四)

来源:互联网 发布:淮北微商自然知彼 编辑:程序博客网 时间:2024/06/11 14:55

模式匹配 match-case
值的匹配:

def bigData(data:String){  data match{    case "Spark" => println("Wow!!!")  //左侧函数体右侧执行内容    case "Hadoop" => println("OK!!!")    case _ => println("No!!")       //不满足上面的情况  }}def bigData(data:String){  data match{    case "Spark" => println("Wow!!!")    case "Hadoop" => println("OK!!!")    case data_ if (data_=="Scala") => println("Good")   //data自动赋值给data_(data)在判断    case data if (data=="Scala") => println("Good")    case _ if (data=="Flink")=> println("Cool!!")    case _ => println("No!!")       //上面对case _进行判断,这里重新补充其他情况  }}

类型匹配:

def exception(e: Exception){  //import java.io._  e match{    case fileException: FileNotFoundException => println("Flie not find:"+fileException)    case _: Exception =>println("Exception getting thread dump from executor SexecutorId",e )  }}exception(new FileNotFoundException("Ooosp"))def data(array:Array[String]){  array match{    case Array("Scala") => println("Scala")    case Array(spark,hadoop,flink) =>println(spark+":"+hadoop+":"+flink)  //只要传入3个元素,就会匹配    case Array("spark",_*) =>println("spark ...")       //匹配以某元素开头的    case _ =>println("Unkown")  }}

继承

case class Person(name:String)Person("Spark")class Personcase class Worker(name:String,salary:Double) extends Personcase class Student(name:String,score:Double) extends Persondef sayHi(person:Person){  person match{    case Student(name,score) => println(name + score)    case Worker(name,salary) => println(name + salary)    case _ => println("None")  }}sayHi(Worker("Spark",6.5))

case class 生成很多实例
case object 本身就是一种实例

Option
Some //有值
None //无值

isInstanceof //代表是什么类型

内型系统、泛型(内型参数)
泛型类:

class Person[T](val content : T)class Person[T](val content : T) {  def getContent(id : T) = id+"_"+content}val p=new Person[String]("Spark")p.getContent("Scala")  //上面定义String,所以必须是字符串泛型函数:

<: A A的子类型(上边界)

: B 使用子类型或者子类型的父类
View Bounds(试图界定) <%
implicit def rddToSequenceFileRDDFuntions[K <% Writable:ClassTag,V <% Writable:ClassTag]
Writable:ClassTag
T:ClassTag //T:类型
Manifest Context Bounds //[T:Manifest] Array[T]

类型[T] 在上下文中注入隐式值,而且注入的过程是自动

class Compare[T :Ordering](val n1:T,val n2:T){  def bigger(implicit ordered : Ordering[T])=if (ordered.compare(n1,n2)>0) n1 else n2}new Compare[Int](8,3).biggernew Compare[String]("Spark","Hadoop").bigger

class Person[+T] 协变 //类型本身是父类和子类的关系,继承一致是协变(+),不一致就是逆变(-)
[]可以是任何类型 Seq[Dependency[]]相当于 Seq[Dependency[T]]

0 0
原创粉丝点击