2010-04-06 74 views

回答

4

Wiki有一個列表

http://en.wikipedia.org/wiki/Mixin#Programming_languages_that_use_mixins

引述:

編程使用除食用香精CLOS( Common Lisp的一部分)的混入

其他語言,一些使用 mixin的語言是:

* ColdFusion (Class based using includes and Object based 
    by assigning methods from one object to another at runtime) 
* Curl(with Curl RTE) 
* D (called "template mixins") 
* Factor[citation needed] 
* Fantom 
* Ioke 
* JavaFX Script 
* JavaScript 
* Object REXX 
* OpenLaszlo 
* Perl[3] 
* PLT Scheme (mixins documentation) 
* Python 
* Ruby 
* Scala 
* Smalltalk 
* Strongtalk 
* Vala 
* Visual Dataflex 
* XOTcl/TclOO (object systems for Tcl)[4] 

像ECMAScript的 一些語言(通常被稱爲JavaScript的) 不支持的語言 水平混入,但可以很容易地通過 複製方法從一個對象模仿他們 另一個在運行時,從而 「借用」mixin的方法。注 ,這是不可能與 靜態類型的語言,其中 對象的簽名被固定在編譯 時間。

0

JavaScript支持它們。您可以隨時將函數/字段添加到對象的原型。

+1

猴子修補!= mixins – 2010-04-06 02:22:26

+0

@Matt Briggs然而,考慮到JS的某些風格 - 特別是支持設置__proto__的風格,您可以獲得與Ruby混合類似的效果通過手動管理'[[prototype]]'鏈。我相信你也可以用精心構造的定義來做類似的事情,但是在這種情況下,'[[prototype]'在構建時仍然是固定的,使得它更像是一個'動態設置的SI'混合。 – 2010-04-06 02:28:23

+1

@Matt Briggs,您是對的,並且將功能添加到原型並在其他功能中進行混合與Monkey Patching不同。猴子修補是相關的但分開的;通過將替換函數分配給原型來替換現有的功能。幸運的是JS支持兩者。 – 2010-04-06 03:56:56

1

_why的potion語言突飛猛進。這個想法是對象有狀態和方法。在大多數語言中,狀態發生在對象中,方法發生在類中。在魔藥中,物體只有狀態,方法完全由mixin處理。

要從自述

一切都是對象引用。即使 MIXINS是對象。和,課程, 關閉是對象。

但是,目標不是一切。他們是無用的,沒有MIXINS。

在旁邊注意,我想念爲什麼。我們需要更多的人做這樣的野生東西