混入与性状混入与性状(Mixins vs. Traits)

2019-05-12 21:36发布

是什么混入和性状的区别?

根据维基百科 ,红宝石模块是有点像的特征。 怎么会这样?

Answer 1:

  1. 混入可能含有的状态,(传统)的特征没有。
  2. 混入使用“隐含的冲突解决”,特点用“明确解决冲突”
  3. 混入取决于线性化,性状变平。

讲座约特质

广告1.在混入你可以定义实例变量。 性状不允许这样。 的状态必须通过(使用性状=类)构成的类来提供

2.广告可能会存在名称冲突。 两个混入( MAMB )或性状( TATB )定义方法以相同的定义foo():void

Mixin MA {
    foo():void {
        print 'hello'
    }
}

Mixin MB {
    foo():void {
        print 'bye'
    }
}

Trait TA {
    foo():void {
        print 'hello'
    }
}

Trait TB {
    foo():void {
        print 'bye'
    }
}

在混入在组成类冲突C mixins MA, MB是隐解决。

Class C mixins MA, MB {
    bar():void {
        foo();
    }
}

这将调用foo():voidMA

在另一方面,同时使用特点,组成类有解决冲突。

Class C mixins TA, TB {
    bar():void {
        foo();
    }
}

此代码将提高冲突(两个定义foo():void )。

3.广告的方法不取决于它是否在一个性状或在使用该性状的类中定义的语义。

换句话说,也没关​​系wheter类由性状或特征代码为“复制 - 粘贴”到类。



Answer 2:

这些页解释了d编程语言的差异。

http://dlang.org/mixin.html

http://dlang.org/traits.html

在此上下文中混入是在飞行中生成的代码,然后在编译期间在代码点插入。 非常方便简单的DSL。

性状是编译时外部值(而不是从外部源生成的代码)。 所不同的是微妙的。 混入添加的逻辑,性状添加诸如编译时类型信息数据。

不知道太多关于Ruby,但希望这有助于一些。



文章来源: Mixins vs. Traits