什么是班级<<自己在红宝石

时间:2012-02-22 15:17:46

标签: ruby

  

可能重复:
  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

实在令人困惑。它是什么?它与前两种方法有什么不同?

2 个答案:

答案 0 :(得分:3)

最终结果基本上与定义为

的结果相同
def self.load_track_lists
  #do somthing 
end

如果你不仅仅在class << self块中定义方法,那么这两种方法之间存在细微差别,如linked question中所述,但实际上你是“开放”了当前类,用于定义类级别方法。

答案 1 :(得分:0)

它与self.url方法没有区别。它基本上是一个容器,允许你放置多个方法,而不必自己。在方法名称前面。可能在示例中没有用,但对于其他类可能非常干净。

IMO这是开发者的偏好