ruby-on-rails – 在ruby中使用class_eval时,如何访问原始类中的
发布时间:2020-12-17 02:32:47 所属栏目:百科 来源:网络整理
导读:我想使用class_eval扩展一个类,并且在尝试从原始类访问常量时,我??得到一个错误说: NameError:未初始化的常量HIS_CONSTANT ????来自./my_module.rb:35:在’show_his_constant’中 ????来自(irb):4 我测试了一个示例程序,但无法使其正常工作.有人可以检
|
我想使用class_eval扩展一个类,并且在尝试从原始类访问常量时,我??得到一个错误说:
NameError:未初始化的常量HIS_CONSTANT 我测试了一个示例程序,但无法使其正常工作.有人可以检查,看看为什么这不起作用?谢谢! 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
但我不想使用命名空间来访问,因为它应该已经包含在内. 解决方法
您必须使用ruby 1.8,因为您的代码看起来像1.9中所写的那样工作.
在1.8中,问题似乎是常量被绑定在定义块的上下文中(当你开始编写MyModule :: YourModule :: HisClass.class_eval时,无论是什么样的自我).您可以使用 MyModule::YourModule::HisClass.class_eval do
def show_his_constant
puts self.class.const_get(:HIS_CONSTANT)
end
end
irb 1.8.7> MyModule::YourModule::HisClass.new.show_his_constant
THIS_IS_A_CONSTANT
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
