函数字面量
另一种定义函数的方式
def getSum(x:Int, y:Int):Int = {
x + y
}
val getSum1 = (x:Int, y:Int) => {
x + y
}
def main(args: Array[String]): Unit = {
println(getSum(10,20))
println(getSum1(10,20))
}
函数字面量的简化写法
* 1. 代码只有一句,省略 {}
* 2. _ 占位符来替换形参
val getSum = (x:Int, y:Int) => {
x + y
}
val getSum1 = (x:Int, y:Int) => x + y
val getSum2 = (_:Int) + (_:Int)
val getSum3:(Int, Int)=>Int = _ + _
def main(args: Array[String]): Unit = {
println(getSum(10,20))
println(getSum1(10,20))
println(getSum2(10,20))
println(getSum3(10,20))
}
把一个函数 当做参数 传递给另一个函数
val f1: (Int, Int) => Int = _ + _
val f2: (Int, Int) => Int = _ * _
def test(fn: (Int, Int) => Int, x: Int, y: Int): Int = {
fn(x, y)
}
def main(args: Array[String]): Unit = {
println(test(f1, 10, 20) == f1(10, 20))
println(test(f2, 10, 20))
}
部分应用函数
如果一个函数需要3个参数,而我们只给了2个参数,会怎么样?
def getSum(a:Int, b:Int, c:Int):Int = {
a + b + c
}
def main(args: Array[String]): Unit = {
println(getSum(10, 20, 30))
val t = getSum(10, 20, _)
val t1 = getSum(_, 20, _)
println(t(50))
println(t1(20, 50))
}
高阶函数:一种特殊的函数,它的参数或者返回值是函数类型。
* 1. map函数
def main(args: Array[String]): Unit = {
val arr1 = Array(1,2,3,4,5,6)
val fn = (x:Int) => x * 2
val arr2 = arr1.map(fn)
for(i <- arr2){
println(i)
}
}
map的练习题
def main(args: Array[String]): Unit = {
val arr1 = Array(1,2,3,4,5)
val arr2 = arr1.map(x => x * x)
for (i <- arr2) {
print(s"$i ")
}
val arr3 = Array(-1,-2,-3,-4)
val arr4 = arr3.map(x => if(x>0) x else -x)
println()
for (i <- arr4) {
print(s"$i ")
}
}