我想了解模块中定义的类如何知道模块的常量。下面是我的意思的例子:在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