scala06.高级函数

第六章高级函数

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")
    }
  }

}


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,383评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,522评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,852评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,621评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,741评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,929评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,076评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,803评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,265评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,582评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,716评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,395评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,039评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,798评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,027评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,488评论 2 361
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,612评论 2 350