什么是“红宝石中的自我”

What is the class << self in ruby

本问题已经有最佳答案,请猛点这里访问。

Possible Duplicate:
Why isn't the eigenclass equivalent to self.class, when it looks so similar?
class << self idiom in Ruby

我有这门课:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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

我理解类和实例方法,但是

1
2
3
4
5
class << self
  def load_track_lists
    #do somthing
  end
end

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


最终结果基本上与定义为相同

1
2
3
def self.load_track_lists
  #do somthing
end

如果您不仅仅在链接问题中描述的class << self块中定义方法,那么这两种方法之间存在细微的差别,但实际上您正在"打开"当前类以定义类级方法 它。


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

IMO这是开发人员的偏好