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
    
  • 相关阅读:
    面向对象简述
    python面向对象
    Python中int()函数的用法浅析
    给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。
    python中关于round函数的小坑
    Xmind8破解,以及相关的流程和破解包
    生成器和生成器表达式
    brush图标
    js声明全局变量的方式
    js修改全局变量
  • 原文地址:https://www.cnblogs.com/PaulingZhou/p/6666502.html
Copyright © 2011-2022 走看看