你喜欢在Ruby中如何定义类方法?

9

John Nunemaker最近在博客中谈到了在Ruby中定义类方法的各种方式,提供了以下三种选择:

# 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个回答

12

我一直在使用方式1:

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

它不啰嗦,而且将方法保持在类的相同上下文中。


3

在单个方法时,我通常更喜欢使用def self.foo,而在长时间的类方法中,我更倾向于使用class << self。我觉得这样可以区分类定义中的类方法部分和实例方法部分。


1

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

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

如果我没记错的话,Pragmatic Programmers Metaprogramming talks(我推荐)中显示了一些小差异,这些差异与类代码的调用和执行方式有关。

虽然它们非常小,但大多数情况下我们不必处理。我会看看能否检查它们并发布出来。


1

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


0

我认为使用 << 添加方法太不寻常了(尽管我很高兴地在字符串和IO中使用 <<)。

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


0

我使用第三种方式,但我认为第一种方式也很好。这取决于您的使用情况。如果您希望您的代码可以“剪切/粘贴”到其他模块和类中,则第一种方式更好。我使用第三种方式实际上是为了使剪切/粘贴代码更加痛苦,因为Ruby的口号是“不要重复自己”,所以您不应该经常剪切/粘贴代码。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接