概念:如果一个函数的传入参数为函数或者返回值是函数,则该函数即为高阶函数。
3.7.1. 匿名函数的定义和案例
1、匿名函数定义:
(x: Int) => x + 1
- 匿名函数说明(一般作为参数值传递):
3.7.2. 函数作为参数[1]
第一步:定义带函数类型参数的函数f2
第二步:定义函数f3(一般定义匿名函数),作为f2的参数值
第三步:调用f2,将f3作为f2的参数值,传递
3.7.3. 返回值为函数
需求:根据参数为true或false,返回转换大写或小写的函数)
3.7.4. 一些简单预定义高阶函数举例
A)、map函数的用法
B)、filter函数的用法
C)、foreach函数的用法
注意:map函数对数组中每个元素操作,返回一个新的数组
filter函数对数组中每个元素进行判断,过滤掉返回false数据
foreach 函数对函数中的每个元素进行操作。
3.7.5. 参数的类型推断(函数作为参数传递)
当将一个匿名函数传递给另一个函数或方法时,scala会尽可能帮你推断出类型信息。
案例需求:
- 要遍历数组中的数据,标准语法如下:
b、接着将语法变型:你可以省略掉x的类型(自动推断)
c、接着将语法变型:对于只有一个参数的函数,你还可以省略掉()
d、接着将语法变型:如果参数在=>右侧只出现一次,你还可以写成下面这种形式
注意:1、_代表通配符,代表任意元素。此处代表集合中的元素
2、_放入print()方法时候,导致无法推断_元素类型,就会报错
f、接着将语法变型:当然你一定可以将{}去掉的
注意:scala语法格式写法非常灵活,以后写代码可以多尝试几种写法,但一定要注释明确
3.7.6. 闭包
闭包:是一个函数,返回值依赖于声明在函数外部的一个或多个变量。
这里我们引入一个自由变量 a,这个变量定义在函数外面。
这样定义的函数变量 add成为一个"闭包",因为它引用到函数外面定义的变量,定义这个函数的过程是将这个自由变量捕获而构成一个封闭的函数。