2

そう信じていた

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 コアに関する関連記事をいくつか見つけました。

4

1 に答える 1