BasicObject を継承したクラスで include する

BasicObject を継承したクラスで include する

BasicObject を継承したクラスで include を行いたかったのですが、次のようなコードではエラーになりました。

module Test
    def test
        10
    end
end

class X < BasicObject
    include Test
    # error: `<class:X>': uninitialized constant X::Test (NameError)
end

解決

モジュール名の先頭に :: をつけると解決しました。

module Test
    def test
        10
    end
end

class X < BasicObject
    include ::Test
end

p X.new.test
# => 10

なんでエラーになっているのかわからなくて2時間ぐらい悩んでいた…。