我想使用 class_eval 扩展一个类,并且在尝试从原始类访问常量时,我收到一条错误消息:
NameError: 未初始化的常量 HIS_CONSTANT 来自 ./my_module.rb:35:in `show_his_constant' from (irb):4
我使用示例程序进行了测试,但无法使其正常工作。有人可以检查一下为什么这不起作用吗?谢谢!
module MyModule
puts "start my module"
def mytest
puts "mytest"
end
module YourModule
def yourtest
puts "yourtest"
end
end
end
module MyModule
module YourModule
module HisModule
HIS_CONSTANT = 'THIS_IS_A_CONSTANT'
end
end
end
module MyModule
module YourModule
class HisClass
include HisModule
def show_constant
puts HIS_CONSTANT
end
end
end
end
MyModule::YourModule::HisClass.class_eval do
def show_his_constant
puts HIS_CONSTANT
end
end
顺便说一句,我知道这种方式可以工作:
MyModule::YourModule::HisClass.class_eval do
def show_his_constant
puts MyModule::YourModule::HisModule::HIS_CONSTANT
end
end
但我不想使用命名空间来访问,因为它应该已经包含在内。