函数式编程高阶
1、函数作为值进行传递,传的是整个函数
def f(n: Int): Int = { println("f调用") n + 1 } val result: Int = f(123) println(result) //1、函数作为值进行传递,传的是整个函数 val f1: Int=>Int = f _ val f2 = f _ println(f1(1)) println(f2(2))

2、函数作为参数进行传递
//定义二元计算函数 def duaEval(op: (Int, Int)=>Int, a: Int, b: Int): Int ={ //调用 op(a, b) } //定义一个一般函数 def add(a: Int, b: Int):Int = { a + b } //三种方式 println(duaEval(add, 1, 2)) println(duaEval((a, b) => a + b, 1, 2)) println(duaEval(_ + _, 1, 2))

3、函数作为函数的返回值返回
def f5():Int=>Unit = { def f6(a: Int): Unit = { println("f6调用" + a) } //将函数直接返回 f6 _ } val f6 = f5() println(f6) println(f6(1)) println(f5()(2))

应用案例:
1 object Test7_Practice_CollectionOperation { 2 def main(args: Array[String]): Unit = { 3 4 val arr: Array[Int] = Array(1, 2, 3, 4, 5) 5 6 //对数组进行处理,将操作抽象出来,处理完毕之后的结果返回一个新的数组 7 def arrayOperation(array: Array[Int], op: Int=>Int): Array[Int] = { 8 //遍历 9 for (elem <- array) yield op(elem) 10 } 11 //定义一个加一操作 12 def addOne(elem: Int): Int ={ 13 elem + 1 14 } 15 16 //调用函数 17 val newArray: Array[Int] = arrayOperation(arr, addOne _) 18 println(newArray.mkString(",")) 19 20 //也可以用传入匿名函数,实现元素 21 val newArray2: Array[Int] = arrayOperation(arr, _ + 1) 22 println(newArray2.mkString(",")) 23 } 24 }


浙公网安备 33010602011771号