2012-02-22 3 views
3

Можно создать дубликат:
Why isn't the eigenclass equivalent to self.class, when it looks so similar?
class << self idiom in RubyЧто такое класс << само рубина

У меня есть этот класс:

class Player < ActiveRecord::Base 
    before_save :set_slug 

    def remains 
    ((end_date - Date.today) + 1).to_i 
    end 

    def self.url 
    "Our_link_#{slug}" 
    end 

    class << self 
    def load_track_lists 
     #do somthing 
    end 
    end 
end 

и я понимаю, класс и методы экземпляра, но

class << self 
    def load_track_lists 
    #do somthing 
    end 
end 

действительно сбивает с толку. Что это такое и как оно отличается от предыдущих двух методов?

+0

@lucapette: что выглядит ли что-нибудь подобное в двух экземплярах? Они похожи и связаны друг с другом, но совсем не дублируются. –

ответ

3

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

def self.load_track_lists 
    #do somthing 
end 

Есть тонкие различия между этими двумя методами, если вы делаете больше, чем просто методы, определяющие в class << self блоке, как описано в linked question, но эффективно вы «открываете» текущий класс для определения методов уровня класса в нем.

0

Он не отличается от метода self.url. Это в основном контейнер, который позволяет вам ставить несколько методов без необходимости ставить себя. перед именем метода. Вероятно, это не полезно в примере, но может быть довольно чистым для других классов.

IMO это предпочтение разработчика