如何包含一个名称存储在变量中的模块?

时间:2013-09-04 18:21:37

标签: ruby

尝试动态包含模块:

module_name = "Foo"
extend {#module_name} # Wanting to do `extend Foo` dynamically

它不会作为参数传递

wrong number of arguments (0 for 1+)

关于如何做到这一点的任何想法?

3 个答案:

答案 0 :(得分:3)

在纯红宝石中,你可以做到

extend Object.const_get(module_name)

或者不那么漂亮的方法,比如

eval "extend #{module_name}"

答案 1 :(得分:2)

您可以使用activesupport gem和String#constantize方法:

require 'active_support/inflector'

module_name = 'Foo'
extend module_name.constantize

答案 2 :(得分:1)

module_name = "Foo"
eval "extend #{module_name}"

require 'active_support/inflector'

module_name = "Foo"
extend module_name.constantize

module_name = "Foo"
extend Object.const_get(module_name)