Ruby基礎学習(10) Mix-in
Mix-inの話と、それに似たもろもろ。他に詳しい記事があるので、これを読んでおけばいいような気はした。
参考
- requireとincludeとextendとmodule_function(1) : As Sloth As Possible
- requireとincludeとextendとmodule_function(2) : As Sloth As Possible
require
- Kernelモジュールのモジュール関数。
- 引数に与えたRubyライブラリを1回ロード、というか実行する。
- 使う場面としてはgemだとか自作のライブラリ(クラス)を読み込むときに指定する。
- 指定した引数は$LOAD_PATHに探しに行き、カレントディレクトリは含まれないため、パスの指定には少し注意が必要。
- 同じファイルを複数回requireしようとしても、1回しか読み込まない。
load
- Kernelモジュールのモジュール関数。
- requireと同様に外部ライブラリを実行するが、同じファイルを何度でも読み込める。
- requireは拡張子の自動補完を行うが、loadは行わない。
include
- Moduleクラスのインスタンスメソッド。
- Moduleを引数に取り、メソッドや定数といった対象Moduleの性質を取り込む。
- ArrayやHashがEnumerableの性質を持っているのはincludeしていることによるもの。
- 継承とは異なるが、メソッドの探索対象としてはスーパークラスよりincludeされたModuleの方が先になる。
- 同じモジュールを複数回読み込もうとしても、2回目以降は無視される。
- Rubyは多重継承を認めていないが、その代わりの機能を果たすという位置付けらしい。
extend
- Objectクラスのインスタンスメソッド。
- 引数に取ったModuleのメソッドを特異メソッドとして取り込める。