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