函数式编程高阶

 

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 }

 

posted @ 2022-04-26 09:41  小王同学学编程  阅读(30)  评论(0)    收藏  举报
levels of contents