我正在尝试构建一个在不同上下文中使用不同版本的类的api。为什么以下代码返回未初始化的常量Project错误而不是在模块中查找正确的常量?
module A
module B
class Project
end
end
end
A::B.module_eval do
puts Project
end
端
答案 0 :(得分:3)
在module_eval
,it doesn't change the way constants are looked up in the block中使用块时。它只更改方法,实例和类变量的查找。这是由于块作为闭包的必要效果,并保留了它自己的周围环境。
这可以通过使用字符串版本module_eval
或通过const_get手动查找常量来解决:
module A
module B
class Project
end
end
end
A::B.module_eval{ const_get(:Project) }
#=> A::B::Project