Warum findet Ruby keine Klassen in einem höheren Bereich, wenn das Modul mit ::? @ Angegeben wi

Ich habe gerade für eine Weile auf diese stecken. Nehmen Sie diese Basis:

module Top
  class Test
  end

  module Foo
  end
end

päter kann ich Klassen in @ definierFoo das erstreckt sichTest indem Sie dies tun:

module Top
  module Foo
    class SomeTest < Test
    end
  end
end

Allerdings, wenn ich versuche, Einrückungen mit @ zu minimier:: um das Modul anzugeben:

module Top::Foo
  class Failure < Test
  end
end

Dies schlägt fehl mit:

NameError: nicht initialisierte Konstante Top :: Foo :: Test

Ist das ein Fehler oder ist es nur eine logische Folge der Art und Weise, wie Ruby Variablennamen auflöst?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage