Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 对象可以用高阶函数实现吗?_Scala - Fatal编程技术网

Scala 对象可以用高阶函数实现吗?

Scala 对象可以用高阶函数实现吗?,scala,Scala,我们能否将一个概念与另一个概念相结合 Objects in terms of higher order functions? Higher order functions in terms of objects? 对 用高阶函数表示的对象 如果您的语言有记录,那么您可以将对象实现为在公共环境上关闭的闭包记录。事实上,这正是ECMAScript中对象的实现方式。(但在ECMAScript中,记录被混淆地称为对象。) 如果您没有记录,或者您订阅了面向消息的OO范例,那么您可以使用选择器函数,它将“

我们能否将一个概念与另一个概念相结合

Objects in terms of higher order functions?
Higher order functions in terms of objects?

用高阶函数表示的对象

如果您的语言有记录,那么您可以将对象实现为在公共环境上关闭的闭包记录。事实上,这正是ECMAScript中对象的实现方式。(但在ECMAScript中,记录被混淆地称为对象。)

如果您没有记录,或者您订阅了面向消息的OO范例,那么您可以使用选择器函数,它将“message”作为参数,并根据消息返回闭包。例如,几乎所有的工作都是这样

关于对象的高阶函数

其实,

  • 使用单一方法的对象同构于函数
  • 具有单个方法和一些实例变量的对象同构于闭包
  • 具有单个方法的对象以具有单个方法的对象作为参数或返回具有单个方法的对象,与高阶函数同构
这正是Scala(使用名为
apply
)的方法、Ruby(使用名为
call
)的方法、
Python
(使用名为
的方法)和Java(作为所谓SAM接口的实例,使用单个抽象方法的接口)实现函数的方式。

可能的重复。