Techioz Blog

Mixin や Traits の良い例は何ですか?

概要

私は Ruby について読んでいて、そのミックスイン パターンについて学びましたが、多くの便利なミックスイン機能を思いつきませんでした (そのように考えることに慣れていないためです)。そこで、便利な Mixin 機能の良い例は何だろうかと考えました。

ありがとう

編集: 背景について少し説明します。私は C++ やその他のオブジェクト言語の出身ですが、ここで疑問に思うのは、Ruby がミックスインを継承していないと言うことですが、私はミックスインを多重継承として見続けているため、ミックスインを自分の快適ゾーンにすぐに分類しようとしているのではないかと心配しています。 、そしてミックスインが何であるかはあまり理解できません。

解決策

これらは通常、すべてを再定義することなく、何らかの形式の標準機能をクラスに追加するために使用されます。おそらく、これらは Java のインターフェースに少し似ていると考えることができますが、実装する必要があるメソッドのリストを定義するだけでなく、その多くはモジュールを含めることによって実際に実装されます。

標準ライブラリにはいくつかの例があります。

シングルトン - 任意のクラスに混合してシングルトンにすることができるモジュール。初期化メソッドはプライベートにされ、インスタンス メソッドが追加されます。これにより、アプリケーション内にそのクラスのインスタンスが 1 つだけ存在することが保証されます。

Comparable - このモジュールをクラスに含める場合、現在のインスタンスを別のオブジェクトと比較してどちらが大きいかを判断する <=> メソッドを定義するだけで、<、<=、==、>=、>、および間?メソッド。

Enumerable - このモジュールを組み合わせて各メソッドを定義すると、収集、注入、選択、拒否などの他のすべての関連メソッドがサポートされます。 <=> メソッドも備えている場合は、sort、min、max もサポートされます。

DataMapper は、標準クラスを取得し、それをデータ ストアに永続化する機能を追加する、単純な include ステートメントで何ができるかを示す興味深い例でもあります。