1

尝试动态包含一个模块:

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

它不会作为参数传递

wrong number of arguments (0 for 1+)

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

4

3 回答 3

3

在纯红宝石中,你可以做

extend Object.const_get(module_name)

或者不太漂亮的方法,比如

eval "extend #{module_name}"
于 2013-09-04T18:29:33.040 回答
2

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

require 'active_support/inflector'

module_name = 'Foo'
extend module_name.constantize
于 2013-09-04T18:28:20.500 回答
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)
于 2013-09-04T18:37:46.517 回答