美文网首页
scala06.高级函数

scala06.高级函数

作者: Java架构师之路 | 来源:发表于2020-01-05 11:33 被阅读0次

第六章高级函数

6.1作为参数的函数

函数可以作为参数进行传递:
既然是变量,那么就该有类型,
那么方法的类型是:(参数类型.…)=>返回类型

6.2匿名函数

可以通过函数表达式设置匿名函数

6.3高阶函数

能接受函数作为参数的函数叫做高阶函数。
高阶函数也可以返回函数:

6.4参数(类型)推断

匿名函数参数的类型推断

6.5闭包

闭包就是一个函数把外部的那些不属于自己的对象也包含(闭合)进来。
闭包机制使用起来就像是一个函数样板。
triple、half这两个函数就叫闭包,闭包由代码和代码用到的任何非局部变量定义构成。
注意:有权访问另一个函数作用域内变量。

6.6柯里化

函数编程中,接受多个参数的函数都可以转化为接受单个参数的函数,这个转化过程就叫柯里化,
柯里化就是证明了函数只需要一个参数而已。

6.7控制抽象

控制抽象是一类函数:
1、参数是函数。
2、函数参数没有输入值也没有返回值。

import org.scalatest.FunSuite

class Chapter05Test extends FunSuite {
  def valueAtOneQuarter(f: (Double) => Double) = f(0.25)

  def mulBy(factor: Double) = (x: Double) => factor * x

  def mulOneAtATime(x: Int) = (y: Int) => x * y

  // 这种叫控制抽象  函数
  def runInThread(block: => Unit) {
    new Thread {
      override def run() {
        block
      }
    }.start()
  }

  test("core01") {
    //作为参数的高阶函数
    import scala.math._
    val num = 3.14
    val fun = ceil _
    println(fun(num))
    Array(3.14, 2.13).map(fun)
  }
  test("core02") {
    //匿名表达式
    (x: Double) =>
      3 * x
      //匿名函数
      val tmp = (x: Double) => 3 * x
      //匿名函数作为参数传递
      Array(3.14, 2.13).map(tmp)
  }
  test("core03") {
    //高阶函数
    import scala.math._
    valueAtOneQuarter(ceil _)
    valueAtOneQuarter(sqrt _)
  }
  test("core04") {
    //参数推断
    //传入函数表达式
    valueAtOneQuarter((x: Double) => x * 3)
    //省去类型推断信息
    valueAtOneQuarter((x) => x * 3)
    //单个参数可以省去括号
    valueAtOneQuarter(x => 3 * x)
    // 如果变量旨在=>右边只出现一次,可以用_来代替
    valueAtOneQuarter(3 * _)

  }
  test("core05") {
    //      闭包就是一个函数把外部的那些不属于自己的对象也包含(闭合)进来了。
    //    闭包机制使用起来就像是一个函数样板。
    val triple = mulBy(3)
    val half = mulBy(0.5)
    println(triple)
    println(half)
  }
  test("core06") {
    //    函数编程中,接受多个参数的函数都可以转化为接受单个参数的函数,这个转化过程就叫柯里化,柯里化就是证明了函数只需要一个参数而已。
    mulOneAtATime(6)(7)

  }
  test("core07") {
    //    控制抽象是一类函数:1、参数是函数。2、函数参数没有输入值也没有返回值。
    // 优雅的传入
    runInThread {
      println("Hi");
      Thread.sleep(1000);
      println("Bye")
    }
  }

}


相关文章

网友评论

      本文标题:scala06.高级函数

      本文链接:https://www.haomeiwen.com/subject/povzectx.html