zoukankan      html  css  js  c++  java
  • 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
    } 
  • 相关阅读:
    【BZOJ1123】 [POI2008]BLO (tarjan)
    【距离GDKOI:44天&GDOI:107天】【BZOJ1040】[ZJOI2008] 骑士 (环套树DP)
    【距离GDOI:128天】【POJ2778】DNA Sequence(AC自动机+矩阵加速)
    【BZOJ1030】[JSOI2007]文本生成器
    【距离GDOI:130天】 AC自动机ing
    【距离GDOI:131天】 后缀数组完毕
    【SPOJ220】Relevant Phrases of Annihilation (SA)
    【POJ3294】 Life Forms(SA)
    【POJ3415】 Common Substrings (SA+单调栈)
    笔记本
  • 原文地址:https://www.cnblogs.com/yin-fei/p/10840380.html
Copyright © 2011-2022 走看看