大数据 -- Scala:高阶函数

定义:使用函数值作为参数,或者返回值为函数值的 “函数”和“方法”

函数值作为参数:

//定义一个数组
scala> val array=Array(1,2,3,4,5)
array: Array[Int] = Array(1, 2, 3, 4, 5)

//定义一个函数
scala> val func=(x:Int)=>x*10
func: Int => Int =

//函数作为参数传递到方法中
scala> array.map(func)
res0: Array[Int] = Array(10, 20, 30, 40, 50)

匿名函数:

//定义一个数组
scala> val array=Array(1,2,3,4,5)
array: Array[Int] = Array(1, 2, 3, 4, 5)

//定义一个没有名称的函数----匿名函数
scala> array.map(x=>x*10)
res1: Array[Int] = Array(10, 20, 30, 40, 50)

柯里化:

定义: 方法可以定义多个参数列表 ; 当使用较少的参数列表调用多参列表的方法时,会产生一个新的函数,该函数接收剩余的参数列表作为其参数 。

def getAddress(a:String)(b:String,c:String):String={ 
          a+"-"+b+"-"+c 
}

scala> val f1=getAddress("china")
f1: (String, String) => String =

scala> f1("beijing","tiananmen")
res5: String = china-beijing-tiananmen

//之前学习使用的下面这些操作就是使用到了柯里化
List(1,2,3,4).fold(0)(_+_)
List(1,2,3,4).foldLeft(0)(_+_)
List(1,2,3,4).foldRight(0)(_+_)

闭包:

定义:函数里面引用外面类成员变量

var factor=10

val f1=(x:Int) => x*factor


//定义的函数f1,它的返回值是依赖于不在函数作用域的一个变量
//后期必须要要获取到这个变量才能执行
//spark和flink程序的开发中大量的使用到函数,函数的返回值依赖的变量可能都需要进行大量的网络传输获取得到。这里就需要这些变量实现序列化进行网络传输。

 

你可能感兴趣的:(大数据,Scala)