什么是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
是一个表示Int
types值的整数字面值 -
'a'
是表示Char
types的值的字符字面量 -
(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)