1.Scala数据类型
Scala的每个基本类型都是以类的形式通过编译器转换成java的基本类型。Scala的数据类型如下图所示:
2.Scala变量类型
Scala具有val和var两种类型的变量。对于可变变量使用var声明,对于不可变变量使用val声明。
对于类似定义spark中RDD 而言,一般使用val声明。
scala> var x = 1000
x: Int = 1000
scala> x = 2000
x: Int = 2000
scala> val x = 1000
x: Int = 1000
scala> x = 2000
<console>:12: error: reassignment to val
x = 2000
^
3.Scala函数
3.1函数结构
def 函数名(形参名:形参类型):返回值类型={
函数体
return 返回值
}
通过使用def关键字定义函数,在Scala操作中可以把函数作为变量使用,也可以在函数内部嵌套函数,如果返回值无类型,可以使用关键字unit定义,在某些情况可以不定义返回值类型(通过形参之间运算的结果让系统自动推测),但是还是建议定义返回值类型,增加程序的可读性。
3.2函数类型
3.2.1成员函数
成员函数就是在类中定义的函数,可以调用类中所有的函数和类变量。
3.2.2局部函数
在函数中定义的函数就是局部函数。子函数只可以使用父函数的变量。
3.2.3高阶函数
把函数以参数方式使用的函数就叫做高阶函数,可以大大的减少代码量。
高阶函数使用格式:
def 函数名( 调用函数名:( 调用函数参数类型) => 调用函数返回值类型): 函数返回值类型 = {
函数体
}
3.2.4匿名函数
有点类似于python中的lambda,具体形式:
(形参:形参类型) => {函数体}
如果函数体只有一句,可以省略大括号。匿名函数可以直接以形参的身份进行定义,也可以当作普通函数使用,可以通过调用函数进行赋值操作。
3.2.5闭包
对于局部函数而言,我们可以通过调用父函数的形参来当作变量进行操作,具体形式
scala> def star(spark:Int,hd:Int):Int = {
| def smallStar(x:Int,func:(Int)=>Int):Int={
| val y = x+1
| func(y)
| }
| val result = smallStar(spark,(n:Int)=>(n*hd))
| result
| }
star: (spark: Int, hd: Int)Int
scala> star(20,30)
res0: Int = 630
其中(n:Int)=>(n*hd)这个匿名函数中,n 是匿名函数的参数,hd是smallstar的父函数star的形参,因此构成了闭包。
所谓的闭包就是调用了本函数之外的变量,smallStar函数只有一个n参数,hd不属于smallStar内的元素。