函数字面量语法,另一种定义函数的方式
语法:var 变量 = (参数列表)=>{方法体}
相对于使用def来说,它:
- 省略了返回值
- 省略了函数名,现在就是变量名
- 多了一个=>
案例:定义一个函数,求两个数的和
object basic46 {
//def
def sum1(x:Int,y:Int): Int = {
x + y
}
//字面量语法
val sum2 = (x:Int,y:Int) => { x+y }
def main(args: Array[String]): Unit = {
println(sum(10,20))
println(sum2(10,20))
}
}
函数字面量语法的简化写法
- 函数体只有一句,可以省略{ }
- 参数只用一次,可以用 _ 代替参数名,指定类型
object basic47 {
val sum1 = (x:Int,y:Int) => { x+y }
val sum2 = (x:Int,y:Int) => { x+y }
val sum3:(Int,Int) => Int = _ + _
val sum4 = ( _ : Int) + ( _ : Int)
def main(args: Array[String]): Unit = {
println(sum1(10,20))
println(sum2(10,20))
println(sum3(10,20))
}
}
部分应用函数
如果一个函数包含多个参数,对该函数传递部分参数使得这个函数返回一个函数,那么这种函数叫做部分应用函数。
案例:定义一个函数,他用来计算三个整数的和
object basic48 {
//def
def sum1(a:Int,b:Int,c:Int): Int = {
a + b + c
}
val sum2 = (a:Int,b:Int,c:Int) => a+b+c
def main(args: Array[String]): Unit = {
println(sum1(10,20,30))
// println(sum1(10,20)) 参数没有给够,会报错!
//传入部分参数,返回部分函数
val r = sum2(10,20,_) // _ 表示一个占位符:现在还不知道具体是什么
//调用部分函数
println(r(50)) // r 就是部分应用函数,对sum2来说,它只有一部分参数
val r1 = sum2(_,20,_)
println(r1(10,30))
}
}