scala语言的一些特技

来源:互联网 发布:小矮星彼得性格知乎 编辑:程序博客网 时间:2024/05/01 22:53

用scala语言做spark项目也有一年了,虽然scala语言也是运行在jvm上面,但其是动态语言,还有很多之前从来没见过的特技,这里写这篇文章记录一下。

1.case class样例类

case class样例类初始化的时候不需要用new来初始化,而且此样例类自带了toString,hascode,equals等方法,这个样例类最多的用途是用来做模式匹配 

case class Person(name:String)  val v1 = Person("xiong")  v1 match {     case Person(name) => name     case _ =>  }  //匹配出name为xiong


2.花括号何时代替小括号

这个问题也困扰我很久了,之前一直不大明白,查了一下说是括号里面其实只有一个参数的话这个小括号就可以用花括号来代替,目前看来主要是用来那些函数调用的时候,比如这样:

scan(t1, cf, startRow, stopRow){ r =>     //TODO process result  } 

3.implicit隐式转换

这个也比较奇怪,只要在这个类或者代码块范围内定义了implicit方法,如果调用函数的时候发现参数类型不匹配的话,scala会自动的去调用这个implicit方法,不管implicit方法是叫啥名,scala只关心的是这个implicit的输入和输出类型是否与他所需要的类型转换所匹配

implicit def str2Int(s:String):Int = Integer.parseInt(s) //隐式str转int  def add(a:Int, b:Int) = a+b  add("1",2) //先把"1"隐式转换为1,再加起来

4.yeild关键字

yeild一般用在for循环中,记住yeild返回的也是一个数组

5.模式守卫

模式守卫一般用在case匹配中,其实相当于case匹配中再加入一个if语句而已

10 match {    case n:Int if 1< n => println(n) //if到=>之前,这段为模式守卫    case _ =>  }