¿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?