20167
## 前置き

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

[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)  
とも関連するのですが上記質問では、未定義なモジュールを`::`で作り出すことはできないという結論になりました。

そこで、今回

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

```

    module A
    
    end
    
    module A::B
      def hoge
        puts 'hoge'
      end
    end
    
    include A::B
    hoge #=> hoge
    
```

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

## 疑問

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

私は以前の質問で、

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

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

```

    class A
    
    end
    
    module A::B
      def hoge
        puts 'hoge'
      end
    end
    
    include A::B
    hoge #=> hoge
    
```

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

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

そもそも  
Aがモジュールの場合、  
`module A::B`はAモジュールにネストしたBモジュールということになりますが、  
Aがクラスの場合、  
`module A::B`はAクラスのBモジュールということでしょうか（クラスのモジュールとは？）？
CC BY-SA 3.0
2015-12-19T01:01:58.373
20164
2016-01-10T03:28:18.650
2017-04-13T12:52:39.113
-1
9008
question
ruby
Rubyにとってモジュール定義とクラス定義は同じであるようなときがある？
`module A::B` は A の下にモジュール B を作るということで、A が クラスかモジュールかはどちらでもいいです。

なお、クラスもモジュールの一種です。
CC BY-SA 3.0
2015-12-19T02:11:27.157
20167
2015-12-19T03:03:52.713
2015-12-19T03:03:52.713
3249
3249
20164
answer
moduleはmoduleにネストさせることが出来ます。  
つまり

```

    module A ; end
    module A::B ; end
    module A::B::C ; end
    
```

といった事が可能です。

```

    Class.superclass #-> Module
    
```

となっています。つまりClassクラスはModuleクラスを継承していることになります。  
ですから、

```

    class A ; end
    module A::B ; end
    
```

と、モジュールをクラスにネストさせることも可能です。
CC BY-SA 3.0
2016-01-10T03:28:18.650
20795
2016-01-10T03:28:18.650
12758
20164
answer