可以根据更高阶函数实现对象吗?

Mah*_*and 2 scala

我们可以用其他方式实现一个概念吗?

Objects in terms of higher order functions?
Higher order functions in terms of objects?
Run Code Online (Sandbox Code Playgroud)

Jör*_*tag 8

是.

高阶函数的对象?

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

如果您没有记录,或者您订阅面向消息的OO范例,则可以使用选择器函数,它将"message"作为参数并根据消息返回闭包.这就是Scheme中所有对象系统的工作原理,例如Oleg Kiselyov的纯功能面向对象系统.

对象方面的高阶函数?

实际上,Scala使用对象实现函数.

  • 具有单个方法的对象与函数同构.
  • 具有单个方法和一些实例变量的对象与闭包同构.
  • 具有单个方法的对象将单个方法的对象作为参数或使用单个方法返回对象,该方法与高阶函数同构.

正是函数在Scala(使用名为方法apply),Ruby(使用名为的方法call)Python(使用名为的方法__call__)和Java(作为所谓的SAM接口的实例,具有单一抽象方法的接口)中实现的方式).