正木です。

class A
  class B
  end
end

のようにネストされたクラスあるいは定数が、instance_evalでは参照できない、
という振る舞いについて伺いたく存じます。

*****
class A
  class B
  end

  def b
    p B
  end
end

a = A.new
a.b

A.instance_eval {
    p B rescue p nil
}

a.instance_eval {
    p B rescue p nil
}

class <<a
    p B rescue p nil
end
*****
A::B
nil
nil
A::B
*****
Aのコンテキストで見えるのはもちろん、
そのインスタンスであるaのコンテキスト(メソッド)や
aの特異クラスでもA::Bは見えています。

ところが、A.instance_evalでもa.instance_evalでもA::Bが見えません。
これはどういったことなのかご存知の方お願いいたします。


******************************
* The Rider, Hacker and Musician.
* +++ ENABLE YOUR HEART +++
******************************
*           MASAKI Yuhsuke.
* reasonset / yahoo.co.jp
* Website: http://reasonset.net/
* GitHub : https://github.com/reasonset/
* Twitter: @reasonset
******************************