ruby 中 include extend require load 的区别

  1. include
  2. extend
  3. require
  4. load
  5. require_relative

include

include 相当于将模块定义的方法和常量插入到类中,mixin的能力可以实现多继承。

module Log 
  def class_type
    "This class is of type: #{self.class}"
  end
end

class TestClass include Log end
tc = TestClass.new.class_type puts tc #This class is of type: TestClass

extend

extend 用于添加类方法而不是include的实例方法。

module Log
  def class_type
    "This class is of type: #{self.class}"
  end
end

class TestClass extend Log # ... end
tc = TestClass.class_type puts tc # This class is of type: TestClass

require

用于加载库,并阻止多次加载。

test_libary.rb
puts " load this libary "
test_require.rb
puts (require './test_library')
puts (require './test_library')
puts (require './test_library')
# 结果为
#  load this libary 
# true
# false
# false

load

同样用于加载库,但是不会阻止多次加载。用于模块的状态经常发生变化的情况

puts load "./test_library.rb"  #在这里不能省略 .rb, require可以省略
puts load "./test_library.rb" 
puts load "./test_library.rb" 
#结果
# load this libary
#true
# load this libary
#true
# load this libary
#true

require_relative

相对位置的引用

require_relative('path')

# equal to
require(File.expand_path('path', File.dirname(__FILE__)))

转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 365433079@qq.com