Mixins 与 Traits
Mixin 和 Traits 有什么区别?
根据 Wikipedia,Ruby 模块有点像特征。 为何如此?
What is the difference between Mixins and Traits?
According to Wikipedia, Ruby Modules are sort of like traits. How so?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
关于特质的讲座
广告 1.
在 mixin 中你可以定义实例变量。 特质不允许这样做。 状态必须由组合类(=使用特征的类)
ad 2. 提供
可能存在名称冲突。 两个 mixin(
MA
和MB
)或特征(TA
和TB
)定义具有相同定义的方法 <代码>foo():void。在 mixins 中,组合类
C mixins MA、MB
中的冲突会被隐式解决。这将从
MA
调用foo():void
另一方面,在使用 Traits 时,组合类必须解决冲突。
此代码会引发冲突(
foo():void
的两个定义)。广告 3。
方法的语义并不取决于它是在特征中定义还是在使用该特征的类中定义。
换句话说,类是否由 Traits 组成或 Traits 代码是否“复制粘贴”到类中并不重要。
Lecture about traits
ad 1.
In mixins you can define instance variables. Traits do not allow this. The state must be provided by the composing class (=class using the traits)
ad 2.
There may be the name conflict. Two mixins (
MA
andMB
) or traits (TA
andTB
) define the method with the same definitionfoo():void
.In mixins the conflicts in composing class
C mixins MA, MB
are resolved implicitly.This will call
foo():void
fromMA
On the other hand while using Traits, composing class has to resolve conflicts.
This code will raise conflict (two definitions of
foo():void
).ad 3.
The semantics of a method does not depend of whether it is defined in a trait or in a class that uses the trait.
In other words, it does not matter whether the class consists of the Traits or the Traits code is "copy - pasted" into the class.
这些页面解释了 D 编程语言的差异。
http://dlang.org/mixin.html
http://dlang.org/traits.html
在此上下文中的 Mixin 是动态生成的代码,然后在编译期间插入到代码中的该点。 对于简单的 DSL 来说非常方便。
特征是编译时外部值(而不是从外部源生成的代码)。 差异是微妙的。 Mixins 添加逻辑,Traits 添加数据,例如编译时类型信息。
对Ruby不太了解,但希望对您有所帮助。
These pages explain the difference in the D Programming language.
http://dlang.org/mixin.html
http://dlang.org/traits.html
Mixins in this context are code generated on the fly, and then inserted at that point in code during compilation. Quite handy for simple DSLs.
Traits are compile-time external values (rather than code generated from an external source). The difference is subtle. Mixins add logic, Traits add data such as compile-time type information.
Don't know much about Ruby, but hope this helps somewhat.