2017-04-14 50 views
2

我們可以用其他的方式實現一個概念嗎?對象可以用高階函數來實現嗎?

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

[在Scala中使用函數編寫類的可能的重複](http://stackoverflow.com/questions/38433112/is-it-possible-to-write-classes-using-functions-in-scala)。 – jwvh

回答

6

是的。

對象在高階函數?

如果你的語言有記錄,那麼你可以實現對象作爲閉包在一個公共環境中的記錄。實際上,這正是ECMAScript中如何實現對象。 (在ECMAScript中,記錄被混淆的稱爲對象,雖然)。

如果沒有記錄,或者您訂閱OO的面向消息的範例,您可以使用選擇函數來代替,這需要的「message」作爲參數並根據消息返回閉包。這幾乎是所有的object systems in Scheme工作,例如Oleg Kiselyov's Purely-functional Object-Oriented System

根據對象的高階函數?

其實Scala implements functions using objects

  • 具有單一方法的對象與函數同構。
  • 具有單個方法和一些實例變量的對象同構於閉包。
  • 具有單個方法的對象,該方法將單個方法的對象作爲參數或使用單個方法返回對象,這與同一個高階函數是同構的。

正是功能是如何在Scala中實現(與名爲apply的方法),紅寶石(名爲call的方法)Python,(與名爲__call__法),和Java(作爲一個這樣的實例叫做SAM界面,一個單一抽象方法的界面)。