Scala的高阶函数和柯里化的函数

一:高阶函数:1.函数作为参数 2.函数的返回值为参数

/**
  * @Author:Alex_lei
  * @Description: 高阶函数,将函数作为函数传入
  */
object High_function {
  def main(args: Array[String]): Unit = {
    val l = List(1,2,3,4)
    println(getMax(l,g))

    /**
      * 返回的fun1是函数,可以继续根据fun1的参数列表进行调用
      */
    val fun1 = returnfunc(true,"Ai")
    println(fun1("alex","Bye"))
  }

  /**
    * 函数作为参数传入函数
    * @param l 列表
    * @param g 函数
    * @return
    */
  def getMax(l:List[Int] ,g:Int => Int) = {
    l.map(g)
  }

  def g(x:Int):Int = {
    x+1
  }

  /**
    * 返回函数
    * @param flag 布尔值
    * @param str 字符串
    * @return 函数(s1:String,s2:String) => s3:String
    */
  def returnfunc(flag:Boolean,str:String) :(String,String) => (String) = {
    var s = ""
    if(flag)
      s = "alex"
    else
      s = "Lily"
    (a:String,b:String) => str+" Hello world "+b

  }

}

 二:柯里化的函数

/**
  * @Author:Alex_lei
  * @Description: 柯里化函数
  */
object Currie_function {
  def main(args: Array[String]): Unit = {
    val r1 = cal(1,2)
    println(r1)

    /**
      * 其实当调用currie_cal函数时,实际上接连调用了两个传统函数
      * ,第一个调用的是单个a参数的,第二个是调用的是单个b参数的。
      * 实现的就是下面的first和second函数
      */
    val r2 = currie_cal(1)(2)
    println(r2)

    val second = first(1)
    val r4 = second(2)
    println(r4)

  }

  /**
    * 传统的两个数相加
    * @param a
    * @param b
    * @return
    */
  def cal(a:Int,b:Int):Int = {
    a + b
  }

  /**
    * 柯里化的函数
    * @param a
    * @param b
    * @return
    */
  def currie_cal(a:Int)(b:Int) = a + b

  def first(a:Int) = (b:Int) => a + b
}

 

posted @ 2019-07-08 11:32  Coding_Now  阅读(434)  评论(0编辑  收藏  举报