文章永久连接:https://tech.souyunku.com/3031
Scala 中的 匿名函数 是没有方法名,也不用 def 定义的函数。一般匿名函数都是一个 表达式
因此 匿名函数 非常适合替换那些只用一次且任务简单的常规函数
匿名函数,会使得我们的代码变得更简洁了。
匿名函数的语法很简单,箭头左边是参数列表,右边是函数体。
定义匿名函数的语法为:
(param1,param2) => [expression]
下面的表达式就定义了一个接受一个Int类型输入参数的匿名函数:
var inc = (x:Int) => x+1
上述定义的匿名函数,其实是下面这个常规函数的简写:
def add(x:Int):Int {
return x+1;
}
以上范例的 inc 现在可作为一个函数,使用方式如下:
var x = inc(7)-1
同样我们可以在匿名函数中定义多个参数:
var mul = (x: Int, y: Int) => x*y
mul 现在可作为一个函数,使用方式如下:
println(mul(3, 4))
我们也可以不给匿名函数设置参数,如下所示:
var userDir = () => { System.getProperty("user.dir") }
userDir 现在可作为一个函数,使用方式如下:
println( userDir() )
范例
object Demo {
def main(args: Array[String]) {
println( "multiplier(1) value = " + multiplier(1) )
println( "multiplier(2) value = " + multiplier(2) )
}
var factor = 5
val multiplier = (i:Int) => i * factor
}
编译执行上面的代码,输出为:
multiplier(1) value = 5
multiplier(2) value = 10
干货推荐
附录:Scala 教程:系列文章
- 一、Scala 教程: 教程
- 二、Scala 教程: 简介
- 三、Scala 教程: 安装
- 四、Scala 教程: 基础语法
- 五、Scala 教程: 数据类型
- 六、Scala 教程: 中文乱码解决
- 七、Scala 教程: 变量
- 八、Scala 教程: 访问修饰符
- 九、Scala 教程: 运算符
- 十、Scala 教程: if…else 语句
- 十一、Scala 教程: 循环
- 十二、Scala 教程: 函数
- 十三、Scala 教程: 闭包
- 十四、Scala 教程: 字符串
- 十五、Scala 教程: 数组
- 十六、Scala 教程: Collection
- 十七、Scala 教程: Iterator(迭代器)
- 十八、Scala 教程: 类和对象
- 十九、Scala 教程: Trait(特征)
- 二十、Scala 教程: 模式匹配
- 二十一、Scala 教程: 正则表达式
- 二十二、Scala 教程: 异常处理
- 二十三、Scala 教程: 提取器(Extractor)
- 二十四、Scala 教程: 文件 IO
- 二十五、Scala 教程: do…while 循环
- 二十六、Scala 教程: 函数 – 默认参数值
- 二十七、Scala 教程: 高阶函数
- 二十八、Scala 教程: 函数嵌套
- 二十九、Scala 教程: Map(映射)
- 三十、Scala 教程: 指定函数参数名
- 三十一、Scala 教程: 偏应用函数
- 【当前读到】三十二、Scala 教程: 匿名函数
- 三十三、Scala 教程: 元组
- 三十四、Scala 教程: 函数传名调用(call-by-name)
- 三十五、Scala 教程: 递归函数
- 三十六、Scala 教程: Set(集合)
- 三十七、Scala 教程: 函数柯里化(Currying)
- 三十八、Scala 教程: 函数 – 可变参数
- 三十九、Scala 教程: Option(选项)
- 四十、Scala 教程: do…while 循环
- 四十一、Scala 教程: while 循环
- 四十二、Scala 教程: List(列表)
- 四十三、Scala 教程: break 语句