为什么我不能从’A’访问以下’B’但可以从主环境访问?
module A; end A.instance_eval{B=1} B #=> 1 A::B #=> uninitialized
解决方法
这样做的惯用方法是
A.const_set(:B,1) A::B #=> 1
至于为什么它不起作用,在Ruby 1.8和1.9.2中(它在1.9.1中有所不同),常量查找是词法范围的.我找到了一个很好的blog post解释.报价:
Note that these rules apply to constant definition as well as lookup.
In 1.8 and 1.9.2,a constant defined in a class_evaluated block will
be defined in the enclosing lexical scope,rather than the scope of
the receiver.
instance_eval也是如此.