【发布时间】:2014-02-20 00:19:22
【问题描述】:
我想在命名空间中定义一堆模块,我将它们放在初始化程序中,但我得到一个“错误的常量名称”异常:
# this is a self-contained example
require 'active_support/all'
# ==> true
[:baz, :qux].each do |name|
Object.const_set("FooBar::#{name.to_s.camelize}", Module.new {
define_singleton_method :my_awesome_static_method do |amount|
DoSomething.calculate(amount)
end
})
end
# =NameError: wrong constant name FooBar::Baz
# = from (irb):4:in `const_set'
# = from (irb):4:in `block in irb_binding'
# = from (irb):3:in `each'
# = from (irb):3
# = from /usr/local/var/rbenv/versions/2.0.0-p353/bin/irb:12:in `<main>'
我认为我得到这个是因为初始化程序在定义 FooBar 之前运行,但问题是如果我在这个初始化程序中定义它,FooBar.constants 是空的,我不确定出了什么问题。
【问题讨论】:
标签: ruby-on-rails ruby metaprogramming