В Ruby, как класс, определенный в модуле, знает константы модуля? - PullRequest
4 голосов
/ 31 января 2011

Я пытаюсь понять, как класс, определенный в модуле, знает константы модуля.Вот пример того, что я имею в виду:

module Car
  class Wheel
  end

  class Seat
    p Wheel        # Car::Wheel
  end
end

Я знаю, что это очевидно, но, поскольку Колесо нигде не находится в иерархии Seat, я не понимаю, как оно может иметь к нему доступ.

Ответы [ 2 ]

6 голосов
/ 01 февраля 2011

Если вы ссылаетесь на константу класса, Ruby будет искать ее сначала в том же модуле, а затем в корне, если она там не найдена.

Итак, поскольку Seat и Wheel находятся в модуле Car, если вы ищите Wheel, сначала он будет искать Car::Wheel, а затем ::Wheel. Поскольку Car::Wheel существует, вы получите эту ссылку.

1 голос
/ 01 февраля 2011

Вы ищете информацию о правилах 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

...