讓我們來找出答案。
class Thing
puts "self=#{self}"
class << self
puts "self in singleton class=#{self}"
def foo
puts "I am #{self}."
end
end
end
# self=Thing
# self in singleton class=#<Class:Thing>
和
Thing.foo
# I am Thing.
我們看到class << self
相同class << Thing
。
這是相同
class Thing
end
class << Thing
puts "self in singleton class=#{self}"
def foo
puts "I am #{self}."
end
end
# self in singleton class=#<Class:Thing>
Thing.foo
# I am Thing.
在類中class << self
或class << Thing
外部的類做一件事情和只有一兩件事:它隨後的塊內變更self
到Thing
的單例類。這同樣說它會將塊內的範圍更改爲Thing
的單例類。
This article by Yehuda Katz is required reading。
相關問題:http://stackoverflow.com/questions/6182628/ruby-class-inheritance-what-is-double-less-than – nickackerman42