feat:线下课:高阶函数
This commit is contained in:
@@ -0,0 +1,63 @@
|
|||||||
|
package chapter2.demo4
|
||||||
|
|
||||||
|
object DemoMethod2 {
|
||||||
|
def main(args: Array[String]): Unit = {
|
||||||
|
|
||||||
|
def f(n: Int): Int = {
|
||||||
|
println("调用了 f 函数")
|
||||||
|
n + 1
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
println("f0函数的返回结果是:" + f(0))
|
||||||
|
|
||||||
|
|
||||||
|
// 1. 函数可以作为值进行传递
|
||||||
|
val f1 = f(_)
|
||||||
|
println("f1函数的返回结果是:" + f1(1))
|
||||||
|
val f2 = f _
|
||||||
|
println("f2函数的返回结果是:" + f2(2))
|
||||||
|
// 明确f3类型(是一个形如Int=>Int的函数)
|
||||||
|
val f3: Int => Int = f
|
||||||
|
// val a: Int = 1
|
||||||
|
println("f3函数的返回结果是:" + f3(3))
|
||||||
|
|
||||||
|
println("=======================")
|
||||||
|
|
||||||
|
// 2. 函数作为参数进行传递
|
||||||
|
def eval(x: Int, y: Int, aaa: (Int, Int) => Int): Unit = {
|
||||||
|
println(s"传入三个参数,分别是$x 和$y 和${aaa}")
|
||||||
|
println("计算后的结果是:" + aaa(x, y))
|
||||||
|
}
|
||||||
|
|
||||||
|
def add(a: Int, b: Int) = a + b
|
||||||
|
|
||||||
|
def minus(a: Int, b: Int) = a - b
|
||||||
|
|
||||||
|
eval(1, 2, add)
|
||||||
|
eval(3, 1, aaa = minus)
|
||||||
|
eval(10, 10, (a, b) => a * b)
|
||||||
|
eval(10, 10, _ / _)
|
||||||
|
|
||||||
|
println("=======================")
|
||||||
|
|
||||||
|
// 3. 函数可以作为另一个函数返回值返回
|
||||||
|
def ff(): (Int,Int)=>Int = { // 定义一个ff函数,这个函数返回 一个形如 (Int,Int)=>Int 的函数
|
||||||
|
println("调用了test")
|
||||||
|
def add(a: Int, b: Int) = a + b
|
||||||
|
add
|
||||||
|
}
|
||||||
|
val ff0:(Int,Int)=>Int = ff() // 调用ff这个函数,返回了一个形如 (Int,Int)=>Int 的函数,并且赋值给ff0
|
||||||
|
println("ff0调用结果是:" + ff0(1,2)) // 既然ff0是一个函数,那么我就可以调用这个函数
|
||||||
|
|
||||||
|
// ff() = add//返回了一个函数 def add(a: Int, b: Int) = a + b
|
||||||
|
|
||||||
|
|
||||||
|
// 链式调用,先调用ff函数,返回的函数继续调用,函数柯里化
|
||||||
|
val ff01 = ff()
|
||||||
|
println("ff01调用结果是:" + ff01(1,2))
|
||||||
|
println(ff()(1,2))
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user