什么是Scala中的函数字面量?

什么是Scala中的函数字面量,我应该什么时候使用它们?

函数literal是用于定义函数的替代语法。 当你想把一个函数作为parameter passing给一个方法(特别是像折叠或者filter操作这样的高阶函数),但是你不想定义一个单独的函数的时候,它是很有用的。 函数文字是匿名的 – 默认情况下它们没有名称,但是可以通过将它们绑定到variables来给它们起个名字。 函数文字是这样定义的:

(a:Int, b:Int) => a + b 

你可以将它们绑定到variables上:

 val add = (a:Int, b:Int) => a + b add(1, 2) // Result is 3 

就像我之前说过的,函数文字对于作为parameter passing给高阶函数是有用的。 它们对于定义嵌套在其他函数中的单行或辅助函数也很有用。

Scala之旅给函数文字(他们称之为匿名函数)提供了很好的参考。

将函数文字与Scala中的其他文字进行比较可能是有用的。 文字是符号糖, 代表语言认为特别重要的某些types的 。 Scala具有整数文字,字符文字,string文字等。Scala将函数作为在源代码中由函数文字表示的第一类值。 这些function值包含特殊functiontypes 。 例如,

  • 5是一个表示Inttypes值的整数字面值
  • 'a'是表示Chartypes的值的字符字面量
  • (x: Int) => x + 2是表示Int => Int函数types中的值的函数文字

文字通常被用作匿名值,也就是说,没有将它们首先绑定到命名variables。 这有助于使程序更加简洁,并且当字面意思不可重复使用时是合适的。 例如:

 List(1,2,3).filter((x: Int) => x > 2) 

 val one: Int = 1 val two: Int = 2 val three: Int = 3 val greaterThan2: (Int => Int) = (x: Int) => x > two List(one,two,three).filter(greaterThan2)