Ponownie otwarto zagnieżdżoną anomalię modułu w Ruby

Dlaczego ponowne otwarcie zagnieżdżonego modułu daje różne wyniki w zależności od użytej składni? Na przykład działa to dobrze:

module A
  module E
  end
end
module A
  module E
    def E.e
    end
  end
end

Ale to:

module A
  module E
  end
end
module A::E
  def E.e
  end
end

daje błąd:

reopen.rb:6:in `<module:E>': uninitialized constant A::E::E (NameError)
from reopen.rb:5:in `<main>'

(Zanim ktoś to zaznaczy, obejście problemu polega na użyciuself zamiast nazwy modułu podczas definiowania E.e, ale tak naprawdę nie jest to punkt tego posta.)

questionAnswers(1)

yourAnswerToTheQuestion