【发布时间】:2011-09-13 18:49:18
【问题描述】:
根据Kernel#require 的文档,该方法返回一个布尔值。我在 IRB 会话中注意到,但是对于某些文件 require 返回一个数组。
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
这是否表明我做错了什么或require 的一些无证行为?
【问题讨论】:
-
我无法在 1.8.7 和 1.9.2 上重现它。此外,我查看了源代码(eval.c:7405),该函数似乎无法返回除 true/false 之外的任何内容。
-
好的,我想我现在明白了。原来我在 IRB 会议的早些时候有
require 'rubygems'和require 'active_support'。看起来 Rails 的 ActiveSupport 导致了行为上的差异。在ActiveSupport::Dependencies::Loadable 中有一个require方法。