我想用一个模块扩展一个Ruby对象,但我希望能够在运行时更改要使用的模块,并且能够通过对象改变它.换句话说,我想将模块的名称extend作为参数传递给我.我怎样才能做到这一点?
我尝试了以下方法:
module M1
end
module M2
end
class C
def initialize module_to_use
extend module_to_use
end
end
m = get_module_name_from_config_file
c1 = C.new m
Run Code Online (Sandbox Code Playgroud)
(假设该方法get_module_name_from_config_file返回String带有所需模块名称的a - 这里"M1"或者"M2".)
但我明白了:
error: wrong argument type String (expected Module).
Run Code Online (Sandbox Code Playgroud)
因为m是类型String,不是Module,显然.我试了一下m是一个符号太多,但我得到了同样的问题(更换String与Symbol错误消息).
那么,我可以转换m成类型的东西Module吗?或者还有另一种方法可以达到这个目的吗?
提前致谢.
我正在尝试将Rails应用程序推送到Heroku,但是当它尝试构建rmagick gem(在Gemfile中指定)时它失败了.我已在bundle install本地完成,应用运行正常.
但是,在预接收钩子中的Heroku上,在构建rmagick示例之后,我得到:
make install
/usr/ruby1.8.7/bin/ruby setup.rb install
rm -f InstalledFiles
---> lib
mkdir -p /disk1/tmp/build_3eu8mw7r34j0f/.bundle/gems/ruby/1.8/gems/rmagick-1.15.17/lib
install RMagick.rb /disk1/tmp/build_3eu8mw7r34j0f/.bundle/gems/ruby/1.8/gems/rmagick-1.15.17/lib/
---> lib/rvg
mkdir -p /disk1/tmp/build_3eu8mw7r34j0f/.bundle/gems/ruby/1.8/gems/rmagick-1.15.17/lib/rvg
install embellishable.rb /disk1/tmp/build_3eu8mw7r34j0f/.bundle/gems/ruby/1.8/gems/rmagick-1.15.17/lib/rvg
install pathdata.rb /disk1/tmp/build_3eu8mw7r34j0f/.bundle/gems/ruby/1.8/gems/rmagick-1.15.17/lib/rvg
install stylable.rb /disk1/tmp/build_3eu8mw7r34j0f/.bundle/gems/ruby/1.8/gems/rmagick-1.15.17/lib/rvg
install describable.rb /disk1/tmp/build_3eu8mw7r34j0f/.bundle/gems/ruby/1.8/gems/rmagick-1.15.17/lib/rvg
install deep_equal.rb /disk1/tmp/build_3eu8mw7r34j0f/.bundle/gems/ruby/1.8/gems/rmagick-1.15.17/lib/rvg
install misc.rb /disk1/tmp/build_3eu8mw7r34j0f/.bundle/gems/ruby/1.8/gems/rmagick-1.15.17/lib/rvg
install text.rb /disk1/tmp/build_3eu8mw7r34j0f/.bundle/gems/ruby/1.8/gems/rmagick-1.15.17/lib/rvg
install rvg.rb /disk1/tmp/build_3eu8mw7r34j0f/.bundle/gems/ruby/1.8/gems/rmagick-1.15.17/lib/rvg
install container.rb /disk1/tmp/build_3eu8mw7r34j0f/.bundle/gems/ruby/1.8/gems/rmagick-1.15.17/lib/rvg
install stretchable.rb /disk1/tmp/build_3eu8mw7r34j0f/.bundle/gems/ruby/1.8/gems/rmagick-1.15.17/lib/rvg
install paint.rb /disk1/tmp/build_3eu8mw7r34j0f/.bundle/gems/ruby/1.8/gems/rmagick-1.15.17/lib/rvg
install clippath.rb /disk1/tmp/build_3eu8mw7r34j0f/.bundle/gems/ruby/1.8/gems/rmagick-1.15.17/lib/rvg
install units.rb /disk1/tmp/build_3eu8mw7r34j0f/.bundle/gems/ruby/1.8/gems/rmagick-1.15.17/lib/rvg
install transformable.rb /disk1/tmp/build_3eu8mw7r34j0f/.bundle/gems/ruby/1.8/gems/rmagick-1.15.17/lib/rvg
<--- lib/rvg
<--- lib
---> ext
---> ext/RMagick
mkdir -p /disk1/tmp/build_3eu8mw7r34j0f/.bundle/gems/ruby/1.8/gems/rmagick-1.15.17/lib …Run Code Online (Sandbox Code Playgroud)