-
06-09-2019 - |
题
之间的区别是什么混入和特质?
根据Wikipedia, 红宝石模块是那种喜欢的特质。怎么会这样?
解决方案
- 混入可能包含的状态,(传统)的特征不。
- 混合使用"隐含的冲突解决"、特性使用"明确解决冲突"
- 混入取决于线性化、特征是夷为平地。
ad1. 在混合可定义的实例变量。特质不允许这样做。国家必须提供通过组成类(=类使用的特性)
ad2.
可能有名的冲突。两种混合类型(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. 语义的一种方法并不取决于它是否被定义中的一个特点或在一个类使用的特征。
换句话说,它并不重要,无论该类包括的特征或特性的代码是"副本贴上"入类。
其他提示
这些页面解释在d编程语言的差异。
混入在该上下文中是在飞行中生成的代码,然后在编译期间在代码点插入。非常方便简单的DSL。
的性状是编译时外部值(而不是从外部源生成的代码)。所不同的是微妙的。混入添加的逻辑,性状添加诸如编译时类型信息的数据。
不知道太多关于Ruby,但希望这有助于一些。
不隶属于 StackOverflow