Ruby 中三種載入程式碼的機制(load, require, autoload)

Load

載入指定的 Ruby 檔案,寫幾次 load 就會執行幾次

# index.rb puts 'first load' load 'loader.rb' puts 'second load' load 'loader.rb' # loader.rb puts <<~TEXT loading ---------- TEXT

輸出:

first load
loading
----------
second load
loading
----------

require

相比 load,只會執行一次,還有一個類似的叫 require_relative,跟 require 差別在於找檔案的起始點不同 require 會從 $LOAD_PATH 這個環境變數裡找,而相對路徑的 require 則比較適合用 require_relative

# index.rb puts 'first require' require './loader.rb' puts 'second require' require './loader.rb' # loader.rb puts <<~TEXT loading....... ---------- TEXT

輸出:

first require
loading.......
----------

second require

autoload

autoload 會註冊 module 名稱在當前的 namespace,當之後訪問該 module 時,會使用 require 載入註冊時的檔案路徑

# index.rb puts 'first autoload' autoload :A, './loader.rb' puts 'second autoload' autoload :A, './loader.rb' A.hi # loader.rb puts <<~TEXT loading....... ---------- TEXT module A def self.hi puts 'hi' end end

輸出:

first autoload
second autoload
loading.......
----------

hi