scala教程:高阶函数-函数返回一个函数

说明

函数可以返回一个函数

返回一个无参、无返回值的函数

def main(args: Array[String]): Unit = {
  /*
  定义函数
  返回值是一个函数,()=>Unit表示该函数无参数,且无返回值
   */
  def test():() => Unit = {
    //在test()函数内部又定义一个函数
    def add() : Unit = {
      println("1111")
    }
    return add
  }
  println(test)

  val fun = test() //调用test()函数,返回 add函数
  println(fun)

  fun() // 调用 add 函数

  test()()//合成一步调用,调用test()函数,返回 add函数,第二个小括号表示调用 add函数

}

执行流程:

合成一步调用

def main(args: Array[String]): Unit = {
  /*
  定义函数
  返回值是一个函数,()=>Unit表示该函数无参数,且无返回值
   */
  def test():() => Unit = {
    //在test()函数内部又定义一个函数
    def add() : Unit = {
      println("1111")
    }
    return add
  }
  println(test)


  test()()//合成一步调用,调用test()函数,返回 add函数,第二个小括号表示调用 add函数

}

执行过程如下:

返回一个 有参数、有返回值 的函数

外部函数 的返回值类型,是 内部函数 的 形参 和 返回值类型

图解定义:

图解调用:

def main(args: Array[String]): Unit = {
  /*
  定义函数
  返回值是一个函数,(Int,Int) => Int表示该函数有2个Int参数,且返回值是Int型
   */
  def test():(Int,Int) => Int = {
    //在test()函数内部又定义一个函数
    def add(a:Int,b:Int) : Int = {
      a+b
    }
    return add
  }

  println(test)

  val fun = test() //调用test()函数,返回 add函数
  println(fun)

  val res = fun(1,2) //调用 add() 函数
  println(res)

}

合成一步调用

def main(args: Array[String]): Unit = {
  /*
  定义函数
  返回值是一个函数,(Int,Int) => Int表示该函数有2个Int参数,且返回值是Int型
   */
  def test():(Int,Int) => Int = {
    //在test()函数内部又定义一个函数
    def add(a:Int,b:Int) : Int = {
      a+b
    }
    return add
  }

  println(test)
  val res = test()(1,2) //调用test()函数,返回 add函数,第二个小括号表示调用 add函数
  println(res)

}

原文出处:/show_1IX302oi8RUN.html