diff --git a/src/main/scala/chapter2/demo4/DemoMethod2.scala b/src/main/scala/chapter2/demo4/DemoMethod2.scala new file mode 100644 index 0000000..2a1dafd --- /dev/null +++ b/src/main/scala/chapter2/demo4/DemoMethod2.scala @@ -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)) + + } + +}