2011-01-31 7 views
4

モジュールで定義されたクラスがモジュールの定数をどのように知っているかを理解しようとしています。ここで私が何を意味するかの例です:Rubyでは、モジュールで定義されたクラスは、モジュールの定数をどのように知っていますか?

module Car 
    class Wheel 
    end 

    class Seat 
    p Wheel  # Car::Wheel 
    end 
end 

私はそれは明らかだが、知っているホイールは、シートの階層にどこにもないので、私はそれにアクセスすることができる方法を理解していません。

+1

Wheel *は、親の名前空間が同じであるため、ピアのようにSeatの階層にあります。 – maerics

答えて

6

あなたはクラスの定数を参照する場合、Rubyは最初の同じモジュールでそれを探します、そしてそれがそこに見つからなければ根の上に。

ので、SeatWheel両方以来、あなたはWheelを探している場合、それは最初::Wheel、次いでCar::Wheelを探し、そしてだろう、Carモジュールです。 Car::Wheelが存在するので、その参照を取得します。

1

ルビーの定数検索の情報を探していますルール。これを取り巻く詳細はRuby 1.9で変更され、Ruby 1.9.2で再び変更されました。あなたはruby-coreメーリングリストでsome discussion on thisを読むことができます。ここで

は、Rubyは1.8.x、Ruby 1.9の、とRuby 1.9.2の違いの一部の優れたレビューです。http://jfire.posterous.com/constant-lookup-in-ruby

関連する問題