[解決済み] ミキシン vs. トレイツ
2022-05-30 16:55:21
質問
MixinとTraitの違いは何ですか?
ウィキペディアによると Rubyモジュールは特質みたいなものだそうです。どうなんでしょう?
どのように解決するのですか?
- Mixin は状態を含むことができますが、(従来の) trait はそうではありません。
- ミキシンは暗黙の衝突解決("implicit conflict resolution)を使用し、traitは明示的な衝突解決("explicit conflict resolution)を使用します。
- Mixins は線形化に依存し、trait は平坦化される。
広告 1. mixinではインスタンス変数を定義することができます。traitsではこれができません。状態は構成するクラス(=traitを使用するクラス)が提供する必要があります。
広告 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'
}
}
mixinでは、クラスを構成する際のコンフリクトを解消するために
C mixins MA, MB
は暗黙的に解決されます。
Class C mixins MA, MB {
bar():void {
foo();
}
}
これは
foo():void
から
MA
一方、Traitを使う場合、合成クラスはコンフリクトを解決しなければなりません。
Class C mixins TA, TB {
bar():void {
foo();
}
}
このコードでは衝突が発生します。
foo():void
).
広告 3. メソッドのセマンティクスは、それがtraitで定義されているか、traitを使用するクラスで定義されているかには依存しない。
言い換えれば、クラスがTraitで構成されているか、Traitのコードがクラスに"コピー"ペーストされているかは重要ではありません。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン