Rubyでは、定数ルックアップはネストの影響を受け、メソッドはネストを保持します。例えばRubyでメソッドのネストを見つける方法を教えてください。
、私はこれらのモジュールがある場合:
module Foo
module ::A
Module.nesting #=> [A, Foo]
def Foo.a
X
end
end
end
Foo.a #=> 1
そして[Foo, B]
の入れ子を持つメソッドFoo.b
:
module A
X = 1
end
module B
X = 2
end
module Foo
end
を私は[A, Foo]
の入れ子を持つメソッドFoo.a
を定義することができます:
module B
module ::Foo
Module.nesting #=> [Foo, B]
def Foo.b
X
end
end
end
Foo.b #=> 2
Foo::X = 3
Foo.a #=> 1 <- still resolves to A::X
Foo.b #=> 3 <- now resolves to Foo::X
しかし、どのように私は、与えられたメソッドのネストを決定します:3210私はFoo::X
を定義した場合の違いが明らかになりましたか?
正直言って、私はなぜ 'Foo.a'と' Foo.b'が定義されていてmainで利用できるのか不明です。 –
@EricDuminil ':: Foo'のために、これはトップレベルの定数を参照しています。 – Stefan
トップレベルのモジュールを他のモジュールにネストすることはできません。 – akuhn