在 Ruby 1.9.2 中包含目录中的所有模块

Gla*_*eep 5 ruby

我已将一组.rb文件放在一个目录中modules/。每个文件都包含一个模块。我正在从一个单独的脚本加载所有这些文件:

Dir["modules/*.rb"].each {|file| load file }
Run Code Online (Sandbox Code Playgroud)

但接下来我必须将它们一一包含在内,明确列出并命名它们:

class Foo
  include ModuleA
  include ModuleB
  # ... and so on.
end
Run Code Online (Sandbox Code Playgroud)

我想知道是否有一些非显式的单行代码可以完成此任务,la(伪代码)......

class Foo
  for each loaded file
    include the module(s) within that file
  end
  # ... other stuff.
end
Run Code Online (Sandbox Code Playgroud)

我考虑过实际读取文件的内容,搜索字符串“ module”,然后提取模块名称,并以某种方式include基于此进行操作 - 但这似乎很荒谬。

我正在尝试做的事情是可取的和/或可能的吗?

Dan*_*ara 2

您可以在每个文件中手动定义一些变量,然后在包含该文件时检查其值。

例如,module1.rb

export = ["MyModule"]

module MyModule

end
Run Code Online (Sandbox Code Playgroud)

第二个module2.rb

export = ["AnotherModule", "ThirdModule"]

module AnotherModule

end

module ThirdModule

end
Run Code Online (Sandbox Code Playgroud)

然后将它们全部包含在您的文件中(只是想法,它可能无法正常工作):

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
Run Code Online (Sandbox Code Playgroud)