我在目录modules/
中放置了一组.rb
文件。这些文件中的每一个都包含一个模块。我正在使用一个单独的脚本加载所有这些文件:
Dir["modules/*.rb"].each {|file| load file }
但随后我必须将它们一一包括在内,明确列出并命名它们中的每一个:
class Foo
include ModuleA
include ModuleB
# ... and so on.
end
我想知道是否有一些非显式的单行代码可以实现这一点,a la(伪代码)......
class Foo
for each loaded file
include the module(s) within that file
end
# ... other stuff.
end
我考虑过实际读取文件的内容,搜索字符串“module
”,然后提取模块名称,并以某种方式执行 include
基于那——但这似乎很荒谬。
我正在尝试做的事情是否可取和/或可行?
最佳答案
您可以在每个文件中手动定义一些变量,然后在包含文件时检查其值。
例如,module1.rb
:
export = ["MyModule"]
module MyModule
end
第二个,module2.rb
:
export = ["AnotherModule", "ThirdModule"]
module AnotherModule
end
module ThirdModule
end
然后将所有这些都包含在您的文件中(只是想法,它可能无法正常工作):
class Foo
Dir["modules/*.rb"].each do |file|
load file
if export != nil
export.each do { |m| include(Kernel.const_get(m))
end
end
end
关于ruby - 在 Ruby 1.9.2 的目录中包含所有模块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5764910/