【发布时间】:2011-11-12 16:54:55
【问题描述】:
我已经阅读了Difference between method and function in Scala 的问题以及许多关于方法和函数之间差异的文章。我有一种感觉,“方法”只是一个“命名函数”,定义为类、特征或对象中的方法。 “函数”代表那些文章中的“匿名函数”或“函数文字”或“函数对象”之类的东西。可以在《Scala 编程http://www.artima.com/shop/programming_in_scala_2ed》一书中找到证据,第 141 页,第 8.1 节,“定义函数的最常见方法是作为某个对象的成员。这样的函数称为方法。”
但是,当我查看 Scala 语言参考http://www.scala-lang.org/docu/files/ScalaReference.pdf 时,有一些概念,比如命名方法。在第 91 页,第 6.20 节返回表达式:“返回表达式 return e 必须出现在一些封闭命名的主体内 方法或函数。”您还可以在同一页面和其他地方找到术语“命名函数”。
所以我的问题是,在 Scala 中,方法、命名方法和命名函数是指同一个概念吗?你从哪里得到命名函数的定义?
在代码List(1, 2).map(_ + 1)中,原来的表达式_ + 1是一个命名方法,然后将方法转换成一个函数。什么样的函数,匿名函数,函数对象,命名函数?
在我的理解中,Scala 只有两种类型的函数:命名函数是方法;一个匿名函数,它是一个函数字面量。函数字面量被编译成 trait FunctionN 的函数对象,以便在 Scala 的纯面向对象世界中使用。
但是,对于上述代码中的_ + 1 等常规命名函数/方法,为什么Scala 会将其转换为另一个函数对象?
【问题讨论】:
标签: function scala methods anonymous named