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)

  

 

 

 

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM