zoukankan      html  css  js  c++  java
  • Scala的高阶函数和柯里化的函数

    一:高阶函数:1.函数作为参数 2.函数的返回值为参数

    /**
      * @Author:Alex_lei
      * @Description: 高阶函数,将函数作为函数传入
      */
    object High_function {
      def main(args: Array[String]): Unit = {
        val l = List(1,2,3,4)
        println(getMax(l,g))
    
        /**
          * 返回的fun1是函数,可以继续根据fun1的参数列表进行调用
          */
        val fun1 = returnfunc(true,"Ai")
        println(fun1("alex","Bye"))
      }
    
      /**
        * 函数作为参数传入函数
        * @param l 列表
        * @param g 函数
        * @return
        */
      def getMax(l:List[Int] ,g:Int => Int) = {
        l.map(g)
      }
    
      def g(x:Int):Int = {
        x+1
      }
    
      /**
        * 返回函数
        * @param flag 布尔值
        * @param str 字符串
        * @return 函数(s1:String,s2:String) => s3:String
        */
      def returnfunc(flag:Boolean,str:String) :(String,String) => (String) = {
        var s = ""
        if(flag)
          s = "alex"
        else
          s = "Lily"
        (a:String,b:String) => str+" Hello world "+b
    
      }
    
    }
    

     二:柯里化的函数

    /**
      * @Author:Alex_lei
      * @Description: 柯里化函数
      */
    object Currie_function {
      def main(args: Array[String]): Unit = {
        val r1 = cal(1,2)
        println(r1)
    
        /**
          * 其实当调用currie_cal函数时,实际上接连调用了两个传统函数
          * ,第一个调用的是单个a参数的,第二个是调用的是单个b参数的。
          * 实现的就是下面的first和second函数
          */
        val r2 = currie_cal(1)(2)
        println(r2)
    
        val second = first(1)
        val r4 = second(2)
        println(r4)
    
      }
    
      /**
        * 传统的两个数相加
        * @param a
        * @param b
        * @return
        */
      def cal(a:Int,b:Int):Int = {
        a + b
      }
    
      /**
        * 柯里化的函数
        * @param a
        * @param b
        * @return
        */
      def currie_cal(a:Int)(b:Int) = a + b
    
      def first(a:Int) = (b:Int) => a + b
    }
    
  • 相关阅读:
    Linux性能监测:磁盘IO篇
    Linux性能监测:网络篇
    Linux性能监测:内存篇
    Linux系统和性能监控之CPU篇
    linux 进程和线程讲解
    web-单机时代
    自动化-ELK日志管理
    自动化--zabbix-proxy
    自动化-zabbix(2)
    IOS中的用户安全
  • 原文地址:https://www.cnblogs.com/lyr999736/p/11150144.html
Copyright © 2011-2022 走看看