::で入れ子のModuleを宣言するとNameErrorになる
下記ともにhoge.rb
と適当に名付けた1ファイル内にすべてのソースを書いています。
Rubyの入れ子のModuleの書き方ですが2通りあるようでして、
module A
module B
def hoge
puts 'hoge'
end
end
end
include A::B
hoge #=> hoge
だと問題なく動くのですが、
module A::B
def hoge
puts 'hoge'
end
end
include A::B
hoge
とした場合、
hoge.rb:1:in `<top (required)>': uninitialized constant A (NameError)
from -e:1:in `load'
from -e:1:in `<main>'
と出てうまくいきません。なぜなのでしょうか?
ちなみに、Railsを使ったプロジェクト(helpers
ディレクトリ)でこのように::
で繋げた書き方をみましたが、問題なく動いておりました。