2010-04-06 75 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。

在旁边注意,我想念为什么。我们需要更多的人做这样的野生东西