class << self和self.method相比哪个更好?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (16)

self.method_name比class method_name更好。但为什么?

class TestClass
  # bad
  class << self
    def first_method
      # body omitted
    end

    def second_method_etc
      # body omitted
    end
  end

  # good
  def self.first_method
    # body omitted
  end

  def self.second_method_etc
    # body omitted
  end
end

提问于
用户回答回答于

class << self善于将所有类的方法保留在同一个块中。如果def self.method从那时开始添加方法,那么没有任何保证(除了惯例和一厢情愿的想法),在文件中稍后将不会有额外的类方法被隐藏起来。

def self.method善于明确指出一种方法是一种类方法,而class << self你必须自己去寻找容器。

用户回答回答于

通常,class << self在元编程中使用该类将该类设置为长时间。我会这样使用它:

METHOD_APPENDICES = [1...10]
class << self
  METHOD_APPENDICES.each do |n|
    define_method("method#{n}") { n }
  end
end

这将创建10个方法(方法1,方法2,方法3等),只会返回数字。class << self在这种情况下,我会使用清晰的内容,因为元编程self是至关重要的。

扫码关注云+社区