尝试动态包含模块:
module_name = "Foo"
extend {#module_name} # Wanting to do `extend Foo` dynamically
它不会作为参数传递
wrong number of arguments (0 for 1+)
关于如何做到这一点的任何想法?
答案 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)