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

时间:2017-04-14 06:00:12

标签: scala

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

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

1 个答案:

答案 0 :(得分:8)

  

高阶函数的对象?

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

如果您没有记录,或者您订阅面向消息的OO范例,则可以使用选择器函数,它将“message”作为参数并根据消息返回闭包。这就是所有object systems in Scheme的工作原理,例如Oleg Kiselyov's Purely-functional Object-Oriented System

  

对象的高阶函数?

事实上,Scala implements functions using objects

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

这是完全如何在Scala中实现函数(使用名为apply的方法),Ruby(使用名为call的方法),Python(使用一个名为__call__)的方法和Java(作为所谓的SAM接口的实例,一个带有单一抽象方法的接口)。