zoukankan      html  css  js  c++  java
  • 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)
    

      

     
     
  • 相关阅读:
    PHP中利用jQuery操作json格式数据,实现$_POST的数据传输和接收
    如何快速掌握一门技术【婴儿最强学习回头看一看】
    显示桌面.scf
    注册表数据库
    win10home_fixgpedit.msc
    Eclipse 中 jetty 调试模式(debug)正常启动无法访问;非调试模式正常
    svn中的与资源库同步操作 讲解
    windows下二进制mysql的卸载以及安装教程
    mysql服务正在启动或停止中请稍后片刻再试一次,服务强制杀死的方法
    Eclipse中git检出、更新、提交、合并分支、以及解决冲突
  • 原文地址:https://www.cnblogs.com/kpwong/p/14148333.html
Copyright © 2011-2022 走看看