lambda表达式

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 =>)和没有提到的简化符号。

你可能感兴趣的:(lambda表达式)