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