Python有模块和包,而包有__init__.py
文件,因此如果我导入名为foo
的包,解释器将查找foo/__init__.py
。
我遇到了一些ruby代码,它不包含模块,而是包含目录:require 'core/utilts'
。 core
和utilts
是目录,而不是单个模块文件。 ruby对文件__init__.py
的等价物是什么,或者当我需要像utilts
目录这样的目录时执行的文件是什么?它下面有很多ruby文件。
答案 0 :(得分:5)
您无法在Ruby中导入目录。如果您正在运行require 'core/utils'
,则会有一个名为core/utils.rb
的文件。可能还是一个名为core/utils/
的目录,但是它utils.rb
通过require
包含在内,而且它可能会包含文件core/utils/
。
因此,您的问题的答案是:不,没有等同于foo/__init__.py
,但通常可以使用foo.rb
完成同样的事情,其中包含foo/
中的其他文件。
答案 1 :(得分:3)
Ruby不支持加载整个目录,但如果需要,它很容易做到:
Dir.glob('lib/*.rb').map do |p|
require p
end
我使用了map
,因为它会返回require
响应,从而可以查看是否有内容无法加载,因为require
返回true表示成功,false表示失败。失败/错误意味着文件没有被加载,因为它不需要,通常是因为它已经是其他东西。如果您不关心返回的值,请使用each
代替map
。
您还可以执行“Adding a directory to $LOAD_PATH (Ruby)”中提到的技巧,然后使用require
,而不在您要加载的文件前面添加任何路径。
答案 2 :(得分:2)
例如:使用以下项目。
lib/
-- core/utils/
-- core/utils.rb
core_utils.gemspec
你会打电话给:
require "core/utils"
并且utils.rb将加载core / utils路径中的所有文件。