我的理解是:
class Example
class << self
def my_method; end
end
end
相当于:
class Example
def self.my_method; end
end
但这是正确的吗?
答案 0 :(得分:3)
它们是等价的,但出于清晰的原因选择后者。当你有一个多行的类时,使用class << self
时可能会错过类方法定义。
答案 1 :(得分:2)
使用class << self
的另一个好理由是在类级别需要访问器时:
class Foo
class << self
attr_accessor :bar
end
end
请注意,这通常不是您想要的,因为它不是线程安全的。但这是一个设计问题。如果你需要它,你需要它。
答案 2 :(得分:1)
在类&lt;&lt;自我所有下面定义的方法都是类方法,直到类&lt;&lt;自我封闭。对于单个级别的类方法或多个类方法,如果您希望可以将方法定义为self.foo。
class Test
def self.foo
end
def bar
end
end
class Test
class << self
def foo
end
end
def bar
end
end
在这两种情况下,您最终都会得到一个类方法“foo”和一个实例方法“bar”。两种方式都可以完成同样的事情。