ruby – 访问常量

前端之家收集整理的这篇文章主要介绍了ruby – 访问常量前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
为什么我不能从’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也是如此.

猜你在找的Ruby相关文章