Scala 高阶函数 匿名函数

一步一步理解Scala高阶函数:

第一步:

   Scala函数可以作为值,传递给另外一个变量,或者另外一个函数

   语法特征: 必须要在函数后面加上空格和下划线

object FunctionOps1 {
  def main(args: Array[String]): Unit = {
    //作为值得函数
    val sayBye = sayGoodBye _  //函数传递给变量空格和下划线
    def say = sayGoodBye _ //函数传递给函数空格和下划线  
    sayGoodBye("zhangsan")
    sayBye("KPWong")
    say("laoli")

  }

  /**
   *   函数可以作为值,传递给另外一个变量,或者另外一个函数
   *    语法特征: 必须要在函数后面加上空格和下划线
   */
  def sayGoodBye(name:String) : Unit = {
    println("Good bye to " + name)
  }

}

第二步:匿名函数:

匿名函数:就是没有名字的函数

Scala 中定义一个完整函数:

   def functionName(Params):returnType = {body}

Scala中定义匿名函数:

   (Params) => returnType //匿名函数定义

  (Params) => {body} //匿名函数实现

问题:
该匿名函数如何被调用
解决方案:
将匿名函数赋值给一个变量或者函数
  val sayAnonymousVal = (name:String) => { println("Good bye to " + name)  }  //匿名函数赋值给变量
  def sayAnonymousFun = (name:String) => { println("Good bye to " + name)  } //匿名函数赋值给函数
object FunctionOps1 {
  def main(args: Array[String]): Unit = {
    //作为值得函数
    val sayBye = sayGoodBye _  //函数传递给变量
    def say = sayGoodBye _ //函数传递给函数
    sayGoodBye("zhangsan")
    sayBye("KPWong")
    say("laoli")

    sayAnonymousVal("laozhao")
    sayAnonymousFun("lao Fang")
  }

  /**
   *   函数可以作为值,传递给另外一个变量,或者另外一个函数
   *    语法特征: 必须要在函数后面加上空格或者下划线
   */


  def sayGoodBye(name:String) : Unit = {
    println("Good bye to " + name)
  }

  //匿名函数:就是没有名字的函数
  /**
   * Scala 中定义一个完整函数:
   *    def functionName(Params):returnType = {body}
   * Scala中定义匿名函数:
   *  (Params) => returnType  //匿名函数定义
   *  (Params) => {body}      //匿名函数实现
   *  问题:
   *     该匿名函数如何被调用
   *  解决方案:
   *     将匿名函数赋值给一个变量或者函数
   */

 val sayAnonymousVal = (name:String) => { println("Good bye to " + name)  }  //匿名函数赋值给变量
  def sayAnonymousFun = (name:String) => { println("Good bye to " + name)  } //匿名函数赋值给函数
  //    def sayGoodBye(name:String) : Unit = {
//      println("Good bye to " + name)
//    }


}

 第三步: 高阶函数:带函数参数的函数,一个函数的参数是函数,这种函数称为高阶函数

  def HigheLevelFunction(name:String,func:(String) => Unit) :Unit = {
     func(name)
  }  

使用高阶函数:

    HigheLevelFunction("LaoGao1",sayAnonymousVal)
    HigheLevelFunction("LaoGao2",(name:String) =>sayAnonymousVal(name))
    HigheLevelFunction("LaoGao3",(name:String) =>sayGoodBye(name))
    HigheLevelFunction("LaoGaoAnonymous1",(name:String) =>{println(name)})  //更多情况下使用这一的匿名函数
    //如果只有一个参数,可以省略掉()
    HigheLevelFunction("LaoGaoAnonymous2",name=>println(name))  //更多情况下使用这一的匿名函数
    //可以用通配符"_" 代替一个变量
    HigheLevelFunction("LaoGaoAnonymous3",{println(_)})
    //最简单的写法,通配符都可以省略
    HigheLevelFunction("LaoGaoAnonymous4",println)

  

 
 
原文地址:https://www.cnblogs.com/kpwong/p/14148333.html