そう信じていた
module A
module B
...
end
end
および (モジュールA
が事前に定義されている場合):
module A::B
...
end
同等ですが、そうではないことが判明しました。与えられた:
module A
C = :foo
end
2 つの形式の動作は異なります。
module A
module B
puts C
end
end
# => :foo
module A::B
puts C
end
# => NameError: uninitialized constant A::B::C
この違いの背後にあるロジックは何ですか? 特に、(最初の形式ではアクセスできるのに)なぜ 2 番目の形式ではA::B
アクセスできないのでしょうか。A::C
アップデート
Ruby コアに関する関連記事をいくつか見つけました。