Require返回一个数组,而不是布尔值

问题描述

| 根据Kernel#require的文档,该方法返回布尔值。我在IRB会话中注意到,但是对于某些文件,“ 0”返回一个数组。
ruby-1.8.7-p330 :001 > require \'net/http\'
=> true 
ruby-1.8.7-p330 :002 > require \'date\'
=> true 
ruby-1.8.7-p330 :003 > require \'lib/data_provider\'
=> [\"DataProviders\"] 
返回的数组包含data_provider.rb中定义的模块的名称
module DataProviders
  module Cached
    class Foo
    # ...
    end
  end

  class Foo
  # ...
  end
end
这是否表明我做错了事或ѭ0的某些未记录的行为?     

解决方法

        我也无法复制它。但是有些宝石可能会覆盖
Kernel#require
module Kernel
  alias_method :old_require,:require
  def require(str)
    old_modules = []
    ObjectSpace.each_object(Module) {|m| old_modules << m }

    old_require(str)

    new_modules = []
    ObjectSpace.each_object(Module) {|m| new_modules << m unless old_modules.include?(m) }
    new_modules
  end
end
当您尝试要求
module DataProviders
  module Cached
    class Foo
    end
  end
  class Foo
  end
end
你会得到
irb(main):012:0> require \'data_provider\'
=> [DataProviders::Cached::Foo,DataProviders::Foo,DataProviders::Cached,DataProviders]