我想了解模塊中定義的類如何知道模塊的常量。下面是我的意思的例子:在Ruby中,模塊中定義的類如何知道模塊的常量?
module Car
class Wheel
end
class Seat
p Wheel # Car::Wheel
end
end
我知道這是顯而易見的,但因爲車輪是無處座椅的層次,我不明白它如何能夠訪問它。
我想了解模塊中定義的類如何知道模塊的常量。下面是我的意思的例子:在Ruby中,模塊中定義的類如何知道模塊的常量?
module Car
class Wheel
end
class Seat
p Wheel # Car::Wheel
end
end
我知道這是顯而易見的,但因爲車輪是無處座椅的層次,我不明白它如何能夠訪問它。
如果引用類常量,紅寶石會尋找它第一次在同一模塊中,然後在根目錄下,如果沒有找到。
所以,因爲兩者Seat
和Wheel
是Car
模塊中,如果你看Wheel
,它會首先尋找Car::Wheel
,然後::Wheel
。由於Car::Wheel
存在,您可以獲得該參考。
您正在尋找有關Ruby的信息Constant Lookup規則。有關詳細信息在Ruby 1.9中進行了更改,然後在Ruby 1.9.2中再次進行了更改。您可以在ruby-core郵件列表上閱讀some discussion on this。
下面是一些紅寶石1.8.x的,紅寶石1.9和Ruby 1.9.2之間差異的精彩回顧:http://jfire.posterous.com/constant-lookup-in-ruby
由於它們具有相同的父命名空間,所以它在我看來Wheel * is *在Seat的層次結構中作爲對等體。 – maerics 2011-01-31 20:59:57