快学Scala第12章----高阶函数

本章探讨Scala中的高阶函数特性,包括作为值的函数、匿名函数、带函数参数的函数、参数推断、有用的高阶函数、闭包、SAM转换、柯里化和控制抽象。通过示例展示了如何创建、传递和使用函数,以及闭包如何引用非局部变量。还介绍了Scala如何通过SAM转换兼容Java的接口,并展示了柯里化在函数组合中的应用。
摘要由CSDN通过智能技术生成

本章要点

  • 在Scala中函数是“头等公民”,就和数字一样;
  • 你可以创建匿名函数,通常还会把它们交给其他函数;
  • 函数参数可以给出需要稍后执行的行为;
  • 许多集合方法都接受函数参数,将函数应用到集合中的值;
  • 有很多语法上的简写让你以简短且易读的方式表达函数参数;
  • 你可以创建操作代码块的函数,它们看上去就像是内建的控制语句。

作为值的函数

在Scala中,你可以在变量中存放函数:

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

这段代码将num设为3.14, fun设为ceil函数。
说明: ceil函数后的 _ 意味着你确实指的是这个函数,而不是碰巧忘记给它传递参数。 从技术上讲, _ 将ceil方法转成了函数,在Scala中,你无法直接操纵方法,而只能直接操纵函数。
这里写图片描述

怎么使用函数:
- 调用它
- 传递它,存放在变量中,或者作为参数传递给另一个函数

fun(num)  // fun是一个包含函数的变量,而不是一个固定的函数
Array(3.14, 1.42, 2.0).map(fun)  // 将fun传递给另一个函数, Array(4.0, 2.0, 2.0)

匿名函数

在Scala中,你不需要给每个函数命名,它就是匿名函数:

(x: Double) => 3 * x
// 将这个函数存放在变量中
val triple = (x: Double) => 3 * x
// 这和用def一样
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 }   // 也可以使用花括号
Array(3.14, 1.42. 2.0) map { (x: Double) => 3 * x }   // 使用中置表示法

带函数参数的函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值