Rubyのクラスとモジュールは同じもの
Rubyを覚えるときは、「Rubyにはクラスとモジュールというものがある」と考えるより、「Rubyのクラスとモジュールは(ほとんど)同じもの」と考えるほうが分かりやすいんじゃないかなあ、という気がしてきました。
クラスとモジュールの違いは、次の5つくらい。これ以外はいっしょ。
- クラスはclass 名前 〜 endで定義する。モジュールはmodule 名前 〜 end で定義する。
- クラスは継承できる。モジュールはできない。
- クラスはインスタンスを作成(new)できる。モジュールはできない。
- モジュールはMixinに使える(include, extendの引数に渡せる)、クラスはMixinに使えない。
- クラスはClassクラスのオブジェクト、モジュールはModuleクラスのオブジェクト。
「モジュールはクラスの一種」とか「モジュールは特殊なクラス」と考えるのがいいのではないか。ClassクラスはModuleクラスのサブクラスではありますが。