我已经阅读了问题
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节中返回表达式:“返回表达式返回e必须出现在一些封闭的名称的主体内
方法或功能.“你也可以在同一页面和其他地方找到术语”命名函数“.
所以我的问题是,在Scala中,做方法,命名方法和命名函数是指同一个概念吗?你在哪里得到命名函数的定义?
在代码List(1,2).map(_ 1)中,原始表达式_ 1是一个命名方法,然后该方法被转换为一个函数.什么样的函数,匿名函数,函数对象,命名函数?
根据我的理解,Scala只有两种类型的函数:作为方法的命名函数;一个函数文字的匿名函数.函数文字被编译成特征FunctionN的函数对象,以便在纯粹的面向对象的Scala世界中使用.
解决方法
链接问题的答案相当好,但要解决您的具体问题:
> method =>你用def关键字定义的东西
>命名方法=>同样,所有方法都有名称
> named function =>已分配给值或从方法转换的函数.与匿名函数形成对比.
方法和Function之间的区别有点像java原语和Java中的盒装Integer之间的区别.
在一般性讨论中,听到两者都被描述为“整数”是很常见的.这通常不是问题,但您必须注意在区分相关的任何地方都要准确.
同样,当程序需要时,方法将自动转换为Function(因此也就是对象),就像装箱原语一样.因此将方法称为函数并不完全错误.
UPDATE
那么它是怎样工作的?
当您尝试将方法作为参数传递给例如列表[A] .map,编译器将生成一个派生Function1 [A,B]的内部类(带有合成名称),以及一个委托给您最初提供的方法的apply方法.然后将其实例作为实际参数传递.