在Ruby中,模块中定义的类如何知道模块的常量?

我试图理解模块中定义的类如何知道模块的常量。 这是我的意思的一个例子:

module Car class Wheel end class Seat p Wheel # Car::Wheel end end 

我知道这很明显,但由于Wheel在Seat的层次结构中无处可去,我不明白它是如何访问它的。

如果你引用一个类常量,Ruby将首先在同一个模块中查找它,然后在根目录中找不到它。

因此,由于SeatWheel都在Car模块中,如果你寻找Wheel ,它将首先寻找Car::Wheel ,然后是::Wheel 。 由于Car::Wheel存在,您可以获得该参考。

您正在寻找有关Ruby的Constant Lookup规则的信息。 围绕这个的细节在Ruby 1.9中发生了变化,然后在Ruby 1.9.2中再次发生了变化。 您可以在ruby-core邮件列表上阅读有关此内容的一些讨论 。

以下是对Ruby 1.8.x,Ruby 1.9和Ruby 1.9.2之间的一些差异的精彩回顾: http : //jfire.posterous.com/constant-lookup-in-ruby