他们不应该做同样的事情吗?这是为什么发生?在这一点上,我不必要地在代码中使用module_eval,但const_set似乎更具可读性。无论如何,我真的很想明白为什么会发生这种情况。Module#const_set和Module#之间的差异module_eval
下面的代码:
class A
def foo
FOO
end
def self.foo
FOO
end
end
module B
class C < A
end
end
B.const_set(:FOO,'asdf')
>> B::C.foo
NameError: uninitialized constant A::FOO
from ./foo.rb:6:in `foo'
from (irb):1
>> B.module_eval {FOO='asdf'}
=> "asdf"
>> B::C.foo
=> "asdf"
不要忘记承认有人回答你的问题;选择答案。 – Tom 2011-03-16 00:08:26