命名方法和命名函数的定义是什么?

我已经阅读了问题 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世界中使用.

但是,对于上面代码中常规命名的funciton /方法(如_ 1),为什么Scala会将其转换为另一个函数对象?

解决方法

链接问题的答案相当好,但要解决您的具体问题:

> method =>你用def关键字定义的东西
>命名方法=>同样,所有方法都有名称
> named function =>已分配给值或从方法转换的函数.与匿名函数形成对比.

方法和Function之间的区别有点像java原语和Java中的盒装Integer之间的区别.

在一般性讨论中,听到两者都被描述为“整数”是很常见的.这通常不是问题,但您必须注意在区分相关的任何地方都要准确.

同样,当程序需要时,方法自动转换为Function(因此也就是对象),就像装箱原语一样.因此将方法称为函数并不完全错误.

UPDATE

那么它是怎样工作的?

当您尝试将方法作为参数传递给例如列表[A] .map,编译器将生成一个派生Function1 [A,B]的内部类(带有合成名称),以及一个委托给您最初提供的方法的apply方法.然后将其实例作为实际参数传递.

相关文章

共收录Twitter的14款开源软件,第1页Twitter的Emoji表情 Tw...
Java和Scala中关于==的区别Java:==比较两个变量本身的值,即...
本篇内容主要讲解“Scala怎么使用”,感兴趣的朋友不妨来看看...
这篇文章主要介绍“Scala是一种什么语言”,在日常操作中,相...
这篇文章主要介绍“Scala Trait怎么使用”,在日常操作中,相...
这篇文章主要介绍“Scala类型检查与模式匹配怎么使用”,在日...