Зачем использовать класс << self в ruby? - PullRequest
4 голосов
/ 29 октября 2010

Можете ли вы объяснить, почему разработчик использует class << self для добавления методов в базовый класс?

base.rb из GeoPlanet Gem

module GeoPlanet
  class Base
    class << self
      def build_url(resource_path, options = {})
    end
  end
end

Ответы [ 2 ]

9 голосов
/ 29 октября 2010

Потому что он этого не знает

def GeoPlanet::Base.build_url(resource_path, options = {}) end

будет работать так же хорошо?

Ну, они не на 100% эквивалентны: если GeoPlanet не существует, то оригинальный фрагмент создаст модуль, но моя версия выдаст NameError. Чтобы обойти это, вам нужно сделать следующее:

module GeoPlanet
  def Base.build_url(resource_path, options = {}) end
end

Что, конечно, поднимет NameError, если Base не существует. Чтобы обойти , что , вы должны сделать:

module GeoPlanet
  class Base
    def self.build_url(resource_path, options = {}) end
  end
end

Как ни крути, не нужно использовать синтаксис синглтон-класса. Некоторые люди просто предпочитают это.

6 голосов
/ 29 октября 2010

Я думаю, это просто вопрос стиля / вкуса.Мне нравится использовать подход class << self, когда у меня есть много методов класса, которые я хочу сгруппировать или обеспечить своего рода визуальное отделение от методов экземпляра.были методы класса, как это сделал автор GeoPlanet.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...