Может кто-нибудь, пожалуйста, объясните мне класс << self? - PullRequest
9 голосов
/ 11 ноября 2010

Я прыгаю в программирование на rails впервые и, глядя на код для некоторых библиотек, которые я скачал, я иногда замечаю код:

class << self
  def func
     stuff
  end
end

Я пытался найти объяснение в Интернете, но << отбрасывается из большинства полезных поисковых систем, поэтому в итоге он просто ищет класс self, что не очень полезно. Любое понимание будет оценено. </p>

Ответы [ 2 ]

12 голосов
/ 11 ноября 2010

В Ruby class << foo открывает одноэлементный класс объекта, на который ссылается foo. В Ruby каждый объект имеет связанный с ним одноэлементный класс, который имеет только один экземпляр. Этот одноэлементный класс поддерживает специфичное для объекта поведение, то есть одноэлементные методы.

Итак, class << self открывает одноэлементный класс self. Что именно self является , конечно, зависит от контекста, в котором вы находитесь. Например, в теле определения модуля или класса это сам модуль или класс.

Если все, что вы используете для одноэлементного класса, это определение одноэлементных методов, на самом деле для этого есть ярлык: def foo.bar.

Вот пример того, как использовать одноэлементные методы для предоставления некоторых «процедур», которые на самом деле не имеют никакой связи с конкретным экземпляром:

class << (Util = Object.new)
  def do_something(n)
    # ...
  end
end

Util.do_something(n)
3 голосов
/ 11 ноября 2010

Это эквивалент

def self.func
  stuff
end

За исключением того, что все вложенные в него методы являются методами класса. Это позволяет вам объявить несколько методов, являющихся методами класса, без декалирования каждого из них на self.

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