是什么混入和性状的区别?
根据维基百科 ,红宝石模块是有点像的特征。 怎么会这样?
是什么混入和性状的区别?
根据维基百科 ,红宝石模块是有点像的特征。 怎么会这样?
讲座约特质
广告1.在混入你可以定义实例变量。 性状不允许这样。 的状态必须通过(使用性状=类)构成的类来提供
2.广告可能会存在名称冲突。 两个混入( MA
和MB
)或性状( TA
和TB
)定义方法以相同的定义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():void
从MA
在另一方面,同时使用特点,组成类有解决冲突。
Class C mixins TA, TB {
bar():void {
foo();
}
}
此代码将提高冲突(两个定义foo():void
)。
3.广告的方法不取决于它是否在一个性状或在使用该性状的类中定义的语义。
换句话说,也没关系wheter类由性状或特征代码为“复制 - 粘贴”到类。
这些页解释了d编程语言的差异。
http://dlang.org/mixin.html
http://dlang.org/traits.html
在此上下文中混入是在飞行中生成的代码,然后在编译期间在代码点插入。 非常方便简单的DSL。
性状是编译时外部值(而不是从外部源生成的代码)。 所不同的是微妙的。 混入添加的逻辑,性状添加诸如编译时类型信息数据。
不知道太多关于Ruby,但希望这有助于一些。