我想在Ruby中需要一个文件而不在Object上定义该文件的常量。相反,我想将它们仅包含在需求文件中的模块中。例如,如果我有一个文件foo.rb,如下所示:
module Foo
def self.hello_world
puts 'Hello, World.'
end
end
我希望实现的结果的表示看起来像这样:
module Bar
require_relative './foo.rb'
end
Foo.hello_world
# NameError: uninitialized constant Foo
Bar::Foo.hello_world
# Hello, World.
似乎Ruby中需要的东西,在另一个文件的顶层定义的任何东西都将被定义为Object上的常量,因此全局可用。我遇到了问题,因为我需要一个与全局命名空间中的常量冲突的文件。
我认识到这个问题可能是Ruby的基础,但有可能有一些元编程技术来克服这个问题吗?
答案 0 :(得分:1)
以下代码段似乎适用于我尝试做的事情:
module Bar
class_eval File.open('./foo.rb').read
end
虽然我可能仍然遗漏了一些东西。
答案 1 :(得分:0)
如果您不需要访问祖先,那么您正在寻找的是extend
module Foo
def hello_world
puts 'Hello, World.'
end
end
module Bar
extend Foo
end
Bar.hello_world