Rubyにとってモジュール定義とクラス定義は同じであるようなときがある？


## 前置き

（適切なタイトルが思いついておりません）

[ruby on rails - ::で入れ子のModuleを宣言するとNameErrorになる -
スタック・オーバーフロー](https://ja.stackoverflow.com/questions/20153/%e3%81%a7%e5%85%a5%e3%82%8c%e5%ad%90%e3%81%aemodule%e3%82%92%e5%ae%a3%e8%a8%80%e3%81%99%e3%82%8b%e3%81%a8nameerror%e3%81%ab%e3%81%aa%e3%82%8b)  
とも関連するのですが上記質問では、未定義なモジュールを`::`で作り出すことはできないという結論になりました。

そこで、今回

### モジュールを先にちゃんと定義

[code]

    module A
    
    end
    
    module A::B
      def hoge
        puts 'hoge'
      end
    end
    
    include A::B
    hoge #=> hoge
    
[/code]

とした場合、問題ありませんでした。

## 疑問

### 同名のクラスを先に定義

私は以前の質問で、

> ちなみに、Railsを使ったプロジェクト(helpersディレクトリ）でこのように::で繋げた書き方をみましたが、問題なく動いておりました。

と書いており、この部分がどうしても気になった結果、どうもクラスにモジュールと同名のものがあれば問題なく動くのではないかと思って、下記ソースを試してみました。

[code]

    class A
    
    end
    
    module A::B
      def hoge
        puts 'hoge'
      end
    end
    
    include A::B
    hoge #=> hoge
    
[/code]

そうすると、確かに問題なく動作しました。

モジュールとクラスの違いがよくわからなくなってしまいました。  
モジュールとクラスは別という認識なので、同名のクラスを用意したときにNameErrorにならないのが変に思えます。

そもそも  
Aがモジュールの場合、  
`module A::B`はAモジュールにネストしたBモジュールということになりますが、  
Aがクラスの場合、  
`module A::B`はAクラスのBモジュールということでしょうか（クラスのモジュールとは？）？




`module A::B` は A の下にモジュール B を作るということで、A が クラスかモジュールかはどちらでもいいです。

なお、クラスもモジュールの一種です。




`module A::B` は A の下にモジュール B を作るということで、A が クラスかモジュールかはどちらでもいいです。

なお、クラスもモジュールの一種です。

