Load 和 require 的区别:
二者的作用相似,都可以加载并执行指定的ruby源代码文件(立即执行),但是require比load常用。
test.rb:
puts " I am a developer!"
execute.rb:
require "./test"
#load "./test.rb"
puts " You are also a developer!"
执行结果:
I am a developer!
You are also a deveploer!
二者区别:
- 除了加载源代码, require还可以加载ruby二进制文件
- load方法的参数是包括扩展名的完整文件名,但是require只要求传入库的名字,可以不需要后缀。
- load会把一个文件加载多次,但是require会避免这样做。
include 和 extend 的区别:
- include主要用来将一个模块插入(mix)到一个类或者其它模块。这个模块的方法在引入它的类或模块中以函数的形式调用.
- extend 用来在一个对象(object,或者说是instance)中引入一个模块,这个类从而也具备了这个模块的方法。
module M
def my_method
"my method"
end
end
class A
include M
end
class B < A; end
puts B.new.my_method()
puts B.ancestors.join(' ')
执行结果:
my method
B A M Object Kernel BasicObject
模块M被插入到了B的祖先连当中,你可以把M当做一个类来使用。模块中的方法成为类的实例方法。
module M
def my_method
"my method"
end
end
class A
extend M
end
class B < A; end
puts B.my_method()
puts B.ancestors.join(' ')
执行结果:
my method
B A Object Kernel BasicObject
模块M中的方法变成了A的类方法。
http://www.johnplummer.com/rails/rails-autoload-ruby-require.html