¿Por qué Ruby no encuentra clases en un ámbito superior cuando el módulo se especifica usando ::?

Me quedé atrapado en esto por un tiempo. Toma esta base:

module Top
  class Test
  end

  module Foo
  end
end

Más tarde, puedo definir clases dentroFoo eso se extiendeTest al hacer esto:

module Top
  module Foo
    class SomeTest < Test
    end
  end
end

Sin embargo, si trato de minimizar la sangría usando:: para especificar el módulo:

module Top::Foo
  class Failure < Test
  end
end

Esto falla con:

NameError: constante no inicializada Top :: Foo :: Test

¿Es esto un error o es solo una consecuencia lógica de la forma en que Ruby resuelve los nombres de las variables?

Respuestas a la pregunta(2)

Su respuesta a la pregunta