函数高级
1 高阶函数
在Scala中,函数是一等公民。怎么体现的呢?
对于一个函数我们可以:定义函数、调用函数
object Test06_HighFunc {
def main(args: Array[String]): Unit = {
def sayHi(name: String): String = {
println(s"hi $name")
s"hi $name"
}
sayHi("linhai")
}
但是其实函数还有更高阶的用法
1)函数可以作为值进行传递
2)函数可以作为参数进行传递
3)函数可以作为函数返回值返回
以下为演示:
1)函数可以作为值进行传递
object Test06_HighFunc{
def main(args: Array[String]): Unit = {
// 1)函数可以作为值进行传递
val func1: String = sayHi("linhai")
// 在被调用函数sayHi 后面加上 _,相当于把函数当成一个整体,传递给变量func2
val func2 = sayHi _
// 如果明确变量类型,那么不使用下划线也可以将函数作为整体传递给变量
val func3: String => String = sayHi
func2("jinlian")
func3("dalang")
}
}
2)函数可以作为参数进行传递
def main(args: Array[String]): Unit = {
// 2)函数可以作为参数进行传递
def sumAB(a: Int, b: Int): Int = a + b
def difAB(a: Int, b: Int): Int = a - b
// 给两个数 ,之后按照传入的公式进行计算
def funcAB(a: Int, b: Int, func: (Int, Int) => Int): Int = {
func(a, b)
}
val i: Int = funcAB(10, 20, difAB)
println(i)
funcAB(10, 20, 2 * _ / 4 *_)
}
3)函数可以作为函数返回值返回
def main(args: Array[String]): Unit = {
// 3)函数可以作为函数返回值返回
def sumByX(x:Int) = {
def sumXY(y: Int): Int = {
x + y
}
sumXY _
}
val function: Int => Int = sumByX(10)
println(function)
val i1: Int = function(20)
println(i1)
val i2: Int = sumByX(10)(20)
println(i2)
}