• scala高阶函数


    1.作为值的函数

    import scala.math._
    
    object Test extends App {
      //scala中函数是头等公民,可以像其他类型一样被传递
      val num = 3.14
      val fun: Double => Double = ceil _ //将ceil方法转成函数
    
      //调用函数
      println(fun(4))
      //传递给其他函数
      val a = Array(3.14,1.42,2.5).map(fun)
    
    }

    2.匿名函数

    object Test extends App {
      //匿名函数
      val fun1 = (x: Double) => x * 3
    
      def fun2(x: Double) = {
        x * 3
      }
    
    }

    3.带函数参数的函数

    import scala.math._
    
    object Test extends App {
    
      def valueAtOneQuarter(num: Double, f: Double => Double) = {
        f(num)
      }
    
      val result = valueAtOneQuarter(25, ceil _)
      println(result)
    
    
      val a: (Double, Double => Double) => Double = valueAtOneQuarter _
      //函数类型 (Double, Double => Double) => Double
    
      //函数产出函数
      def mulBy(factor:Double) = {
        (x:Double)=>x*3
      }
    
      val b: Double => Double => Double = mulBy _
    
    }

    4.参数类型推断

    object Test extends App {
    
      def valueAtOneQuarter(f: Double => Double) = {
        f(0.25)
      }
    
    
      valueAtOneQuarter((x: Double) => 3 * x)
      //scala会自动推断类型
      valueAtOneQuarter((x) => 3 * x)
    
      //只有一个参数 括号可省略
      valueAtOneQuarter(x => 3 * x)
    
      //参数在=>右侧值出现一次 可用下划线替换
      valueAtOneQuarter(3 * _)
    }

    5.闭包

    object Test extends App {
    
      def mulBy(factor: Double) = (x: Double) => factor * x
    
      val triple = mulBy(3)
      val result1 = triple(2)
      println(result1)
    
    }

    6.柯里化

    object Test extends App {
      // 柯里化:将原来接收两个参数的函数变成接收一个参数的函数的过程
      //新的函数返回一个以原有第二个参数作为参数的函数
    
      def mul(x: Int, y: Int) = x + y
    
      def mulOneAtATime(x: Int) = (y: Int) => x + y
    
      println(mul(1, 2))
      println(mulOneAtATime(1)(2))
    
      def mulOneAtATimeNew(x: Int)(y: Int) = x + y
    } 
  • 相关阅读:
    python print 在命令行打印带颜色
    Cython 一篇通
    gcc 内置函数
    gcc 内置函数
    #define xxx do{...} while(0) 宏定义
    防止cpu 一直被占用 sleep(0) 和 yield
    golang之archive/tar包的使用
    go+mysql实现页面的增删改查练习
    设计模式之访问者模式
    设计模式之模板模式(PHP实现)
  • 原文地址:https://www.cnblogs.com/yin-fei/p/10840380.html
Copyright © 2020-2023  润新知