你更喜欢在Ruby中定义类方法吗?

时间:2009-05-19 09:35:05

标签: ruby

John Nunemaker最近在Ruby上发表了关于various ways to define class methods的博客,给出了以下三种选择:

# Way 1
class Foo
  def self.bar
    puts 'class method'
  end
end

# Way 2
class Foo
  class << self
    def bar
      puts 'class method'
    end
  end
end

# Way 3
class Foo; end
def Foo.bar
  puts 'class method'
end
  • 你最喜欢的方法是什么?
  • 你喜欢上述以外的东西吗?
  • 如果您使用多种方式,在什么情况下使用它们?

6 个答案:

答案 0 :(得分:12)

我一直使用方式1:

class Foo
  def self.bar
    puts 'class method'
  end
end

它并不详细,它使方法保持在类的相同上下文中。

答案 1 :(得分:3)

对于单个方法,我通常更喜欢def self.foo,而对于很长的类方法,我通常更喜欢class << self。我觉得它区分了类方法部分和类定义的实例方法部分。

答案 2 :(得分:1)

我更喜欢Way 1,因为它不是上下文敏感的。我不喜欢跳到文件的中间然后向上或向下滚动以查看缩进是否意味着我在class << self块中或者它只是一个嵌套模块。

答案 3 :(得分:1)

同意大多数用户。我倾向于主要使用

# Way 1
class Foo
  def self.bar
    puts 'class method'
  end
end

如果我没记错的话,会出现一些细微的差异,这些差异会出现在Pragmatic Programmers Metaprogramming会谈中(我推荐),它与如何调用和执行类代码有关。

它们非常小,但大多数情况下我们不需要正常处理。将看看我是否可以检查并发布它。

答案 4 :(得分:0)

我查看&lt;&lt;添加方法太不寻常(虽然我很乐意使用&lt;&lt;与字符串和IO)。

我避免使用Foo.bar,因为这意味着重复自己。

答案 5 :(得分:0)

我使用Way#3,但我认为Way#1也很棒。这取决于您的使用情况。如果您希望将代码“切割/匹配”到其他模块和类中,那么Way#1会更好。我使用Way#3实际上更难以剪切/粘贴代码,b / c Ruby的口头禅是“不要重复自己”所以你不应该经常剪切/粘贴代码..