大三寒假学习 spark学习 函数定义 匿名函数和闭包
匿名函数;
我们不需要给每个函数命名,这时候可以使用匿名函数:
( num: Int ) => num*2
上面这种匿名函数的定义形式,我们经常称为“Lambda表达式”。“Lambda表达式”的形式如下:
( 参数 ) => 表达式//参数只有一个,括号可以省略
示例:
val myNumFunc: Int => Int =( num: Int ) => num*2
println(myNumFunc(3))
运行结果:
Scala具有类型推断机制,我们可以将myNumFunc的类型省略掉:
val myNumFunc = (num: Int) => num*2
但是把右边的Int也省略掉,解释器将无法推断出类型,如果给出函数的类型则不会报错:
val myNumFunc: Int => Int =( num ) => num*2
闭包:
闭包也是一种函数,是一种特殊的函数
普通函数
val addMore=(x:Int)=>x>0
闭包
val addMore=(x:Int) =>x+more
为什么叫闭包,下面举个例子说明
首先我们看到,闭包函数中多了一个未知的变量more
当我们执行addMore(10)的时候,程序会找到var more =1对函数中的more进行绑定
此时 函数中的more由一个开放的未知的变量,变成了已知的变量
闭包反映了一个有开放到封闭的过程