首先我們先建立三個檔案a.rb, b.rb, c.rb如下:
a.rbA = "A constant in a.rb"
p "Print A = '#{A}' in a.rb"
b.rbA = "A constant in b.rb"
p "Print A = '#{A}' in b.rb"
如果在c.rb裡同時load a.rb與b.rb兩個檔案:
c.rbload("a.rb")
load("b.rb")
p "Print A = '#{A}' in c.rb"
load("b.rb")
則會出現下面的結果:
"Print A = 'A constant in file a.rb' in a.rb"
b.rb:1: warning: already initialized constant A
a.rb:1: warning: previous definition of A was here
"Print A = 'A constant in file b.rb' in b.rb"
"Print A = 'A constant in file b.rb' in c.rb"
b.rb:1: warning: already initialized constant A
b.rb:1: warning: previous definition of A was here
"Print A = 'A constant in file b.rb' in b.rb"
由此可知,使用load有下面特性:
如果不想將b.rb裡的constant載入到c.rb中,則可以在load後面加上true:
c.rbload("a.rb")
load("b.rb", true)
p "Print A = '#{A}' in c.rb"
"Print A = 'A constant in file a.rb' in a.rb"
"Print A = 'A constant in file b.rb' in b.rb"
"Print A = 'A constant in file a.rb' in c.rb"
上面執行的結果就只會讀到a.rb的A,但b.rb的程式碼仍會執行。
如果將c.rb改成require如下:
require("./a")
require("./b")
p "Print A = '#{A}' in c.rb"
require("./b")
則結果會變成:
"Print A = 'A constant in file a.rb' in a.rb"
/Users/kait/temp/b.rb:1: warning: already initialized constant A
/Users/kait/temp/a.rb:1: warning: previous definition of A was here
"Print A = 'A constant in file b.rb' in b.rb"
"Print A = 'A constant in file b.rb' in c.rb"
由此可知,require與load的差別在於