Mix-in が分かった気になる
分かっていたこと
- module のインスタンスは生成できない
- module は class にいくつも include できる
分かっていなかったこと
- module の include は結局多重継承みたいなもんである
- module を include した class を継承することで単一継承の形を維持できる
- is-a 関係ではないがメンバ変数やメソッドを共有したい場合はやはりあって、このときに include を便利に使える
- ただ class 的には is-a ではないから module で include するんだけど、include してるかどうかは is_a?() でチェックできる。ここは理屈から言うとスッキリしない気もするけど実際には便利だと思う。
自分は Java 的な Interface ってコンパイル時にチェックが効くだけでコードの再利用ができないのがイケてないと思っているんだけど1、module がまさに自分の欲しいものなのだとやっと理解できた気がする。
今までただの namespace 的なものとしてしか使ってなかったよ。
cf.
そもそもこの理解もあやしいです ↩