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也是如此.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...