(一) 函数的字面量语法
除了使用def之外的,另一种定义函数的方式
语法:var 变量 = (参数列表)=>{方法体}
它省略了def,函数名以及函数的返回值类型。
object Base55 {
//定义一个函数,计算两数的和
def sum(x:Int,y:Int):Int = {
x + y
}
//字面里语法看起来就像给变量赋值
//val a = 1
val sum1 = (x:Int,y: Int) => { x + y }
def main(args: Array[String]): Unit = {
val a = 2
val n = 5
println(s"$a + $n = ${sum1(a,n)}")
}
}
简化写法
Scala的函数字面量的简化方式有两种方式:第一种方式为:_(占位符)。如果函数中的参数在方法体中只使用了一次,可以用_替换。
第二种方式为:只有一个表达式时,可以省略括号。
object Base56 {
// 定义一个函数,计算两数的和
def sum(x: Int, y: Int): Int = {
x + y
}
// 字面量语法:看起来就像给变量赋值
val sum1 = (x: Int, y: Int) => { x + y }
/*
* 要点:
* 1. 有一个箭头符号 =>
* 2. 省略def,省略了返回值类型
*
* 特殊的写法-简写
* 1. 函数只有一句代码,可以省略 { }
* 2. 如果参数只使用了一次,那么可以用 _ 来代替。要加上参数的类型
*/
val sum2 = (x: Int, y: Int) => x + y
val sum3: (Int, Int) => Int = { _ + _ }
val sum4 = (_: Int) + (_: Int)
def main(args: Array[String]): Unit = {
val a = 2
val n = 5
println(s"a + n = ${sum1(a, n)}")
println(s"a + n = ${sum2(a, n)}")
println(s"a + n = ${sum3(a, n)}")
println(s"a + n = ${sum4(a, n)}")
}
}
(二)把函数作为参数
object Base57 {
// 定义一个函数,计算两数的和
//定义一个字里面函数,计算两个数的较大者
val getMax = (x: Int, y: Int) => if(x>y) x else y
//定义一个字里面函数,计算两个数的较小者
val getMin = (x: Int, y: Int) => if(x<y) x else y
//test c这个函数,它的第一个参数是函数
val test = (x:(Int,Int)=>Int,a:Int,b:Int) => {
println("test被调用")
println(x(a,b))
}
def main(args: Array[String]): Unit = {
test(getMax,1,2)
}
}
(三)Scala部分应用函数
如果一个函数包含多个参数,对该函数传递部分参数使得这个函数返回一个函数,那么这种函数叫做部分应用函数。
object Base58 {
// 部分应用函数:在调用函数的时候,只传入一部分参数。
val mul = (a: Int, b: Int, c: Int) => a * b * c
def main(args: Array[String]): Unit = {
val rst = mul(2, 3, 4)
val f = mul(2, 3, _) // 第三个参数传入一个 _,表示:这个参数先空置,也不能返回最后的计算结果。它的返回值是一个函数:部分应用函数
val rst1 = f(5) // mul(2,3,5)
println(rst)
println(rst1)
}
}