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

标签 ruby

我在目录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/

相关文章:

ruby - compass 安装在 WebSpace : Command not found

Ruby,删除部分文件路径

ruby-on-rails - 是否有替代方法 Array#product 的使用方法?

ruby - ruby dev : mac os x or linux 使用什么(本地)服务器

ruby-on-rails - Rails 4 嵌套表单 Simple_form_for 和 simple_field_for

ruby - 如何要求一个中文名为ruby的文件?

ruby - 为什么 `JSON.parse` 没有抛出异常?

ruby-on-rails - 为下一个 API 版本使用不同的 gem 的版本控制

ruby - Rails 3.2.8 与 Ruby 1.9.3 兼容吗?

ruby - Prawn PDF : render a set of things on the same page