什么是Scala中的函数文字,我应该在什么时候使用它们?什么是Scala中的函数文字?
回答
函数literal是定义函数的替代语法。当你想将一个函数作为参数传递给一个方法时(特别是像折叠或过滤器操作这样的高阶函数),但不想定义一个单独的函数时,这非常有用。函数文字是匿名的 - 默认情况下它们没有名称,但是可以通过将它们绑定到变量来给它们起个名字。文字函数的定义,像这样:
(a:Int, b:Int) => a + b
您可以将它们绑定到变量:
val add = (a:Int, b:Int) => a + b
add(1, 2) // Result is 3
就像我之前说的,功能文字是传递作为参数传递给高阶函数是有用的。它们对于定义嵌套在其他函数中的单行或辅助函数也很有用。
A Tour of Scala为函数文字(他们称之为匿名函数)提供了很好的参考。
将函数文字与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)
与
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)
有没有办法让类型更加明确?这个工作原理:'List(1,2,3).map(x => x + 10)' 这不起作用:'List(1,2,3).map((x:Int):Str = > x。toString)' 这个工作,但它不是很明确:'List(1,2,3).map((x:Int)=> x.toString)' 或者如果我想这样做,我应该使用一个named功能? – monteiro 2018-01-21 19:16:50
@monteiro'List(1,2,3).map((x:Int)=> {x.toString}:String)' – 2018-01-22 11:33:03
非常感谢! :) – monteiro 2018-01-23 00:22:54
- 1. Scala中的应用函数是什么?
- 2. scala中的函数和函数文字
- 3. 什么是类型和什么是类型构造函数scala
- 4. 将`Unit`传递给Scala中的函数的目的是什么
- 5. 什么是scala中的RNA?
- 6. Scala中的[A]是什么?
- 7. Scala中class参数的val是什么?
- 8. Scala中curried函数的基本原理是什么?
- 9. 什么是Scala中所有函数的超类型?
- 10. 为什么Scala中的匿名函数和函数是这样构造的?
- 11. Scala中函数的平等是Scala中的函数对象吗?
- 12. scala List的配套函数返回GenericCompanion的用例是什么?
- 13. 在PHP中,文字与方法/函数的含义是什么?
- 14. 什么时候是一个scala部分函数而不是部分函数?
- 15. 为什么这个scala并置函数不是递归的?
- 16. Scala forSome关键字是什么?
- 17. 什么是Scala的类
- 18. 什么是Scala中的“(x,y)”,实际返回的是什么?
- 19. Scala中的Random.nextDouble的范围是什么?
- 20. 在Scala的函数文字中,链接=>(向右双箭头)运算符的含义是什么?
- 21. Scala REPL中的当前类是什么?
- 22. Scala中“new {}”的含义是什么?
- 23. Scala中Long.toInt的语义是什么?
- 24. 什么是scala Stream中的#::运算符?
- 25. Scala中#::的含义是什么?
- 26. 什么是Scala中的盒装错误?
- 27. Scala中的“底层类型”是什么?
- 28. 是什么意思:+ scala中的行?
- 29. param:_ *在Scala中的含义是什么?
- 30. “<:”在Scala中的含义是什么?
我想这可能是有用指出文字的功能是怎么过的功能N只是糖 - 这将提供一个总体良好的情况下的文字与“长”版本。另外,虽然我有+1,但它通常不是“定义函数的替代语法[你的意思是方法????]”,因为***函数不是方法*** - 只构造方法*适用于可以派发给他们的类和消息(类)。 *函数*是“第一类值”(支持“apply”的对象和其他几个)。 – 2011-03-09 04:21:29
def add =(a:Int,b:Int)=> a + b是不是一样?我可以使用这个'add'来传递给另一个函数 – ses 2014-03-01 18:07:49
你也可以用一个现有的函数用underscope运算符创建一个函数literal: def addTwoNumbers(a:Int,b:Int)= a + b; def add2 = addTwoNumbers _ – Blitzkr1eg 2018-02-01 08:05:55