一: 函数的字面量语法
除了使用def之外的,另一种定义函数的方式
请语法:var 变量 = (参数列表)=>{方法体}
它省略了def,函数名以及函数的返回值类型。
定义:
val sum1 = (x:Int, y:Int)=>{x+y}
调用:
var s = sum1(10,34)
要点:
1:有一个箭头符号 =>
2省略了def,省略了返回值类型
object txy44 {
def main(args: Array[String]): Unit = {
val sum1 = (x:Int,y:Int) => {x + y}
val a = 2
val b = 3
println(sum1(a,b))
}
}
特殊的写法:
1:函数只有一句代码可以省略{ }
2:如果参数只用了一次,那么可以用_代替,要加上参数的类型
object txy44 {
def main(args: Array[String]): Unit = {
v*al sum1 = (x:Int,y:Int) => {x + y}
val sum2 = (x:Int,y:Int) => x+y
val sum3 : (Int,Int) => Int = { _ + _ }
val sum4 = (_:Int) + (_:Int)
val a = 2
val b = 3
+
println(sum1(a,b))
println(sum2(a,b))
println(sum3(a,b))
println(sum4(a,b))
}
}
二:把函数作为参数
某个函数的参数是函数
定义一个接收函数作为参数的函数def a(f:()=>Unit)={},其中函数的类型()=>Unit部分()为函数的参数,Unit为函数的返回值。通过定义字面量传递值时,字面量必须和函数的类型匹配。
object txy45 {
def main(args: Array[String]): Unit = {
val max = (x:Int,y:Int) => if(x>y) x else y
val min = (x:Int,y:Int) => if(x>y) y else x
val t = (x:(Int,Int)=>Int,a:Int,b:Int) => {
println("t被调用")
println(x(a,b))
x
}
println(max(1,9))
println(min(1,9))
t(max,1,2)
}
}
三scala部分应用函数
如果一个函数包含多个参数,对该函数传递部分参数使得这个函数返回一个函数,那么这种函数叫做部分应用函数。
object txy46 {
def main(args: Array[String]): Unit = {
val sul = (a:Int,b:Int,c:Int) =>a+b+c
val rst = sul(1,2,4)
val rsu = sul(1,2,_)
//部分应用函数:在调用函数时,之传入一部分参数
val rse = rsu(4)
//rse给reu的_处补了个4 =>sul(1,2,4) =>7
println(rst)
println(rse)
}
}