我已阅读Difference between method and function in Scala和许多关于方法和功能差异的文章。我感觉'方法'只是一个被定义为类,特质或对象中方法的“命名函数”。一个'函数'代表这些文章中的“匿名函数”或“函数文字”或“函数对象”之类的东西。一个证据可以在Scala编程http://www.artima.com/shop/programming_in_scala_2ed,第141页第8.1节中找到,“定义函数的最常见方法是作为某个对象的成员,这样的函数称为方法。”命名方法和命名函数的定义是什么?
但是,当我检查斯卡拉语言参考http://www.scala-lang.org/docu/files/ScalaReference.pdf时,有像命名方法的概念。在页91,第6.20节返回表达式:“一个返回表达式返回e必须发生在一些名为 方法或函数的正文内部。”您也可以在同一页面和其他地方找到术语“命名的功能”。
所以我的问题是,在斯卡拉,方法,命名方法和命名函数是指同一个概念?你在哪里得到命名函数的定义?
在代码List(1, 2).map(_ + 1)
中,原始表达式_ + 1
是一个命名方法,然后将该方法转换为函数。什么样的函数,匿名函数,函数对象,命名函数?在我的理解,斯卡拉只有两种类型的函数:一个命名函数是一种方法;一个函数文字的匿名函数。函数文字被编译到特征函数N的函数对象中,以便它在纯粹的面向Scala的面向对象世界中使用。
但是,对于上述代码中的常规命名函数/方法(例如_ + 1
),为什么Scala会将其转换为另一个函数对象?
函数 - >方法转换是不可避免的,所讨论的方法是在函数类中定义的“应用”。非常像我的原始拳击比喻:) –
我会说不同:每个函数*代表一个函数类的实例上定义的'apply'方法。这里没有转换,这就是函数的定义。另一方面,将一个方法转换为一个函数实际上是分配和构建新的东西。 –
我问过这个问题,因为方法和函数的混合使我困惑 - 是一种函数方法吗?或命名的功能?或者根本不是功能?这个答案使用了最后一个定义,即一个方法不是一个函数。这个定义在Scala语言规范中是不成立的(参见上面的问题)。这是我试图澄清的事情。 – Ying