1、作为参数的函数
函数可以作为一个参数传入到一个方法当中去
def main(args: Array[String]): Unit = {
val myFunc1 =(x:Int) =>{
x * x
}
val myArray = Array(1,3,5,7,9).map(myFunc1)
println(myArray.mkString(","))
}
|
2、匿名函数
没有名字的函数即是匿名函数,我们可以通过函数表达式来设置匿名函数
def main(args: Array[String]): Unit = {
val hiddenFunc = (x:Int,y:String) => x + y
println(hiddenFunc)
}
|
3、高阶函数
1、能够接受函数作为参数的方法,叫做高阶函数
def main(args: Array[String]): Unit = {
val func3:(Int,String) =>(String,Int)={
(x,y)=>(y,x)
}
def myMethod3(hello:(Int,String) => (String,Int)):Int ={
val resultFunc = hello(20,"hello")
resultFunc._2
}
println(myMethod3(func3))
}
|
2、高阶函数同样可以返回一个函数类型
def main(args: Array[String]): Unit = {
def myFunc4(x:Int) = (y:String) => y
println(myFunc4(50))
}
|
4、参数类型推断
def main(args: Array[String]): Unit = {
val array = Array(1,2,4,6,8,9)
//map当中需要传入一个函数,我们可以直接定义一个函数
array.map((x:Int) => x * 2 )
//进一步化简 参数推断省去类型信息
array.map((x) => x * 2 )
//进一步化简 单个参数可以省去括号
array.map( x => x * 2 )
//进一步化简 如果变量只在=>右边只出现一次,可以用_来代替
array.map( 2 * _ )
? ?
}
|
5、闭包与柯里化
柯里化是scala当中面向函数式编程导致的一种必然的结果,最终推导而来产生的一种现象
def main(args: Array[String]): Unit = {
//柯里化的定义形式
def kery(x:Int)(y:Int):Int={
x + y
}
println(kery(3)(5))
//柯里化的推导过程,注意方法的返回值不要定义任何的返回值类型
val keryResult = (x:Int) => (y:Int) => {x + y}
def keryMethod(x:Int) ={
(y:Int) => x+ y
}
println(keryMethod(20))
println(keryMethod(20)(10))
//注意,方法当中的函数,调用了方法的参数,就叫做闭包
}
|
? ?
再来看一个案例
/**
* 柯里化的应用,比较数组集合当中两个对应下标字符串是否相等
* @param args
*/
def main(args: Array[String]): Unit = {
val a = Array("Hello","World")
val b = Array("hello","world")
println(a.corresponds(b)(_.equalsIgnoreCase(_)))
? ?
}
|
?
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|