什么是Scala中的函数文字?

时间:2011-03-09 03:59:03

标签: scala functional-programming

Scala中的函数文字是什么?我何时应该使用它们?

3 个答案:

答案 0 :(得分:70)

函数文字是定义函数的替代语法。当你想将一个函数作为参数传递给一个方法(特别是像折叠或过滤操作这样的高阶函数)但是你不想定义一个单独的函数时,这很有用。函数文字是匿名的 - 默认情况下它们没有名称,但您可以通过将它们绑定到变量来为它们命名。函数文字的定义如下:

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

您可以将它们绑定到变量:

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

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

A Tour of Scala为函数文字提供了很好的参考(它们称之为匿名函数)。

答案 1 :(得分:16)

将函数文字与Scala中的其他类型的文字进行比较可能很有用。 Literals表示语言认为特别重要的某些类型的值的符号糖。 Scala has整数文字,字符文字,字符串文字等.Scala将函数视为源代码中可通过函数文字表示的第一类值。这些函数值存在于特殊function type中。例如,

  • 5是一个整数文字,表示Int类型
  • 中的值
  • 'a'是一个字符文字,表示Char类型
  • 中的值
  • (x: Int) => x + 2是一个函数文字,表示Int => Int函数类型
  • 中的值

文字通常用作匿名值,即不首先将它们绑定到命名变量。这有助于使程序更简洁,并且当文字不可重用时是合适的。例如:

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

VS

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)

答案 2 :(得分:0)

Scala中的编程,第三版

8.3一流的功能

  

函数文字被编译为一个类,该类在运行时实例化为函数值。[2]因此,函数文字和值之间的区别在于,函数文字存在于源代码中,而函数值在运行时作为对象存在。类(源代码)和对象(运行时)之间的区别非常相似。