zoukankan      html  css  js  c++  java
  • 快学Scala(12)--高阶函数

    在函数式编程语言中,你只需要将明细动作包在函数当中作为参数传入即可。

    作为值的函数

    import scala.math._
    class TestFun {
      val num = 3.14
      val fun = ceil _
    }
    

      这段代码将num设为3.14,fun设为ceil函数。ceil函数后面的_意味着你确实指的是这个函数,而不是碰巧忘记了给他送参数

    Array(3.14, 1.42, 2.0).map(fun)  //Array(4.0, 2.0, 2.0)
    

      map方法接受一个函数参数,将它应用到数组中的所有值,然后返回结果的数组。

    匿名函数

    val triple = (x: Double) => 3 * x  //def triple(x: Double) = 3 * x
    Array(3.14, 1.42, 2.0).map((x: Double) => 3 * x)  //Array(3.14, 1.42, 2.0).map{ (x: Double) => 3 * x }

      在这里,使用匿名函数高速map方法:”将每个元素乘以3“

    带函数参数的函数

    def valueAtOneQuarter(f: (Double) => Double) = f(0.25)
    

      valueAtOneQuarter的类型为((Double) => Double) => Double

    def mulBy(factor: Double) = (x: Double) => factor * x
    val quintuple = mulBy(5)
    quintuple(20)  //100

      mulBy函数的类型为(Double) => ((Double) => Double)

    参数(类型)推断

    在参数类型已知的情况下,可以简写参数类型

    val fun = 3 * _              //错误:无法推断类型
    val fun = 3 * (_: Double)        //OK
    val fun: (Double) => Double = 3 * _  //OK,因为我们给出了fun的类型
    

    一些有用的高阶函数

    1. map:将一个函数应用到某个集合的所有元素并返回结果

    2. foreach: 将函数应用到每个元素

    3. filter: 输出所有匹配某个条件的元素

    4. reduceLeft: 接受一个二元的函数,并将它从左到右应用到序列中的所有元素

    (1 to 9).reduceLeft(_ * _)
    

      表示(...((1 * 2) * 3) * ... * 9)

    5. sortWith: 二元函数,排序

    闭包

    def mulBy(factor: Double) = (x: Double) => factor * x
    val triple  = mulBy(3)
    val half = mulBy(0.5)
    println(triple(14) + " " + half(14))    //将打印 42 7
    
  • 相关阅读:
    Solr3.5安装测试指南yzn
    Babylon.js 构建 地球,支持切片地图 (四)
    arcgis 4 与deckgl 整合 (一)
    初遇Citymaker (一)
    arcgis 4 与deckgl 整合 (三)
    Babylon.js 构建 地球,支持切片地图 (一)
    Babylon.js 构建 地球,支持切片地图 (五)
    Babylon.js 构建 地球,支持切片地图 (三)
    Babylon.js 构建 地球,支持切片地图 (六)
    Babylon.js 构建 地球,支持切片地图 (二)
  • 原文地址:https://www.cnblogs.com/PaulingZhou/p/6666502.html
Copyright © 2011-2022 走看看