A.instance_eval { foo } # => "I don't know why!!"
A.instance_eval { constants } # => ["WHY"]
A.instance_eval { const_get "WHY" } # => "I don't know why!!"
class A ; eval "WHY" ; end # => "I don't know why!!"
Constants follow different rules for lookup.
instance_eval changes the 'self' for method lookups, but you are still
in the top-level scope for constant lookups. You must be inside "class
A" (or "module A") to get the constant lookup of WHY == A::WHY.
Note the complementary case,
B = Class.new {
WHEREAMI = "here"
}
WHEREAMI # => "here"
Despite being defined inside the instance of B, this constant lies in
the top-level scope.