ruby - 如何动态更改 Ruby 中的嵌套?

标签 ruby module namespaces metaprogramming nested

我使用模块作为命名空间,并希望用类动态填充它们,例如:

module Module1
  # ...
end

module Module2
  # ...
end

[Module1, Module2].each do |the_module|
  the_module.module_eval do
    class ApiTest < ActiveSupport::TestCase
      # ...
    end
  end
end

module_eval 可以工作,只是它不会改变嵌套,保留外部嵌套。因此,所包含的常量不会嵌套在模块中。

最初的动机是为每个包含在其自己模块中的不同 API 实现生成相同测试。

最佳答案

这是另一个选项(注意“self::”)

module Module1
  # ...
end

module Module2
  # ...
end

[Module1, Module2].each do |the_module|
  the_module.module_eval do
    class self::ApiTest < ActiveSupport::TestCase
      # ...
    end
  end
end

关于ruby - 如何动态更改 Ruby 中的嵌套?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9438442/

相关文章:

ruby (在 Rails 上)正则表达式 : removing thousands comma from numbers

Powershell 模块存储用户设置的位置

python - 如何测试我是否成功安装了 Python 模块?

php - 命名空间 php 中的反射

ruby - 我可以在使用 Devise 成功登录后执行自定义操作吗?

ruby-on-rails - 奇怪的问题 has_many 通过更新的 Rails 中的关联

java - 我可以将 org.eclipse.jdt.core 导入 Netbeans 吗?

php - doxygen 可以从 use 语句中确定类吗?

C++ 命名空间警告 - 声明隐藏全局声明 VS 2015 警告 C4459

ruby - 我可以在散列定义中放置某种形式的 If..End block 吗?