loadとrequireとincludeとextendの違い
個人的にloadとrequireとincludeの違いについて整理しておきたくなったので書いておこうと思います!
loadとrequireとincludeとextendの違い
load
loadはKernelのメソッドです。
ファイルを読み込みます。
同じファイルを何回もロードできます。
require
requireはKernelのメソッドです。
ライブラリを読み込みます。(loadと違ってただのテキストファイルなどは不可)
一度読み込んだら再度読み込む事はしません。(二度目以降はrequireするとfalseが返る)
include
includeはModuleのメソッドです。
includeされたモジュールのインスタンスメソッドはincludeしたクラスのインスタンスメソッドとして使用できるようになります。
extend
extendはObjectクラスのメソッドです。
extendされたモジュールのメソッドはextendしたクラスのクラスメソッドとして使用できるようになります。
比較表
|
メソッドのクラス |
メソッドの機能 |
load |
Kernel |
ファイルを読み込み実行する |
require |
Kernel |
ライブラリを読み込み使える状態にする |
include |
Module |
インスタンスメソッドを生やす |
extend |
Object |
クラスメソッドを生やす |
感想その他
requireは一度しかできないという話の流れで、
$LOADED_FEATURESでrequireしてあるライブラリが取得できるというのを知りました!!面白い!!
irb(main):001:0> p $LOADED_FEATURES
["enumerator.so","thread.rb","rational.so","complex.so","/Users/hayashiyoshino/.rbenv/versions/2.6.1/lib/ruby/2.6.0/x86_64-darwin18/enc/encdb.bundle”,…..]