chroju.dev/blog

the world as code

Ruby基礎学習(10) Mix-in

Mix-inの話と、それに似たもろもろ。他に詳しい記事があるので、これを読んでおけばいいような気はした。

参考

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のメソッドを特異メソッドとして取り込める。