lambda表达式
2018-09-05 本文已影响2人
默云客
lambda表达式本质上是一个匿名函数,java中lambda表达式是从接口扩展而来,但对接口方法有严格要求,它要求在实现Lambda表达式的接口中只有一个抽象方法。这个方法称为sam(single abstract method),即单个抽象方法,能够使用Lambda表达式的接口称为“功能性接口”,如何对“功能性”接口进行语法检查,加一个注解@FunctionInterface。Scala中lambda表达式是一等公民,有def这样的高级类型接口,所以可以随意使用
- 在Scala中一个函数文本写成如下形式:
(argument) => //funtion body
eg: 计算两个字符串长度差 :
(s1: String, s2 :String) => s1.length - s2.length
Scala中的函数文本也是闭包。它可以访问在直接词法作用域之外定义的变量。
val outer =10
val myFuncLiteral = (y: Int) => y * outer
val result = myFuncLiteral(2)
> 20
我们将函数文本分配给了变量 myFuncLiteral。
java 8 的lambda表达式和Scala的函数文本在语法和语义上的相似性是十分明显的。从语义上讲它们是相同的,而语法上的唯一不同就是箭头符号(java8 ->, scala =>)和没有提到的简化符号。