第12章 高阶函数

作为值的函数

import scala.math._
val num = 3.14
val fun = ceil _
fun(num)

匿名函数

val tripe = (x: Double) => 3 * x
def trip(x: Double) = 3 * x
Array(3.14, 1.42, 2.0).map(tripe)
//中括号
Array(3.14, 1.42, 2.0).map{
  x => 3 * x
}

带函数参数的函数

def valueAtOneQuarter(f: Double => Double) = f(0.25)
valueAtOneQuarter(ceil _)
valueAtOneQuarter(sqrt _)
//类似柯里化
def mulBy(factor: Double) = (x: Double) => x * factor
val quintuple = mulBy(5)
quintuple(20)

类型推断

valueAtOneQuarter(x => 3 * x)
valueAtOneQuarter(_ * 3)
//推断不出类型
//val fun = 3 * _
val fun1 = 3 * (_: Double)
val fun2: Double => Double = 3 * _

一些有用的高阶函数

//map foreach filter reduce reduceLeft
//获取序列值可以从简单的序列中转化得出
(1 to 9).map(_*3).foreach(print(_))
//"*" * _
(1 to 9).map("*" * _).foreach(println(_))
(1 to 9).filter(_ % 2 == 0)
(1 to 9).reduceLeft(_ + _)
//def reduce[A1 >: A](op: (A1, A1) => A1): A1 = reduceLeft(op)
(1 to 9).reduce(_ + _)

柯里化

def mul(x: Int) = (y: Int) => x + y
//简写
def mulOneAtiTime(x: Int)(y: Int) = x + y
val a = Array("Hello", "World")
val b = Array("hello", "world")
println(a.corresponds(b)(_.equalsIgnoreCase(_)))

控制抽象

//没有输入,输出
def runInThread(block: => Unit) {
  new Thread {
    override def run(){block}
  }.start()
}
//多条语句记得用中括号
runInThread{println(".."); Thread.sleep(1000); println("Bye")}

//模拟一个while循环
def until(condition: => Boolean)(block: => Unit) {
  if (!condition) {
    block
    until(condition)(block)
  }
}

var x = 10
until (x == 0){
  println(x)
  x -= 1
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值