Ruby:class<<自; def方法VS. def self.method

时间:2014-04-15 17:19:29

标签: ruby class

我的理解是:

class Example
  class << self
    def my_method; end
  end
end

相当于:

class Example
  def self.my_method; end
end

但这是正确的吗?

3 个答案:

答案 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”。两种方式都可以完成同样的事情。