什么是Scala中的函数文字?

pra*_*see 44 functional-programming scala

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

Raf*_*ler 74

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

(a:Int, b:Int) => a + b
Run Code Online (Sandbox Code Playgroud)

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

val add = (a:Int, b:Int) => a + b
add(1, 2) // Result is 3
Run Code Online (Sandbox Code Playgroud)

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

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

  • 我认为指出函数文字对函数N的影响可能是有用的 - 这将为文字与"长"版本提供一般的好例子.另外,虽然我有+1,但它通常不是"定义函数的替代语法[你的意思是方法????]"因为***函数不是方法*** - 方法构造只有**适用于可以分派给他们的类和消息(类).*functions*是"第一类值"(支持`apply`和其他一些的对象). (15认同)

Mar*_*lic 19

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

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

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

List(1,2,3).filter((x: Int) => x > 2)
Run Code Online (Sandbox Code Playgroud)

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)
Run Code Online (Sandbox Code Playgroud)

  • @monteiro`List(1,2,3).map((x:Int)=> {x.toString}:字符串)` (2认同)