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

时间:2011-01-31 20:48:16

标签: ruby module constants hierarchy

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

module Car
  class Wheel
  end

  class Seat
    p Wheel        # Car::Wheel
  end
end

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

2 个答案:

答案 0 :(得分:6)

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

因此,由于SeatWheel都位于Car模块中,如果您查找Wheel,它将首先查找Car::Wheel,并且然后是::Wheel。由于Car::Wheel存在,您可以获得该引用。

答案 1 :(得分:1)

您正在寻找有关Ruby的常量查找规则的信息。在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