在Ruby中放置私有方法的地方?

大多数博客或教程或书籍在任何类/模块的底部都有私有方法。 这是最佳做法吗?

我发现在必要时使用私有方法更方便。 例如:

public def my_method # do something minion_method end private def minion_method # do something end public def next_method end 

这样,我发现代码更可读,而不是连续滚动上下,这是非常刺激的。

这种方法有什么错误吗? 在底部有私人的方法不只是一个最好的做法和其他东西?

在我看来,最好的做法是按顺序去宣布你的方法,而不要保持私人的观点。

最后,只需添加: private :xmethod就可以使任何私有方法成为私有

例:

 class Example def xmethod end def ymethod end def zmethod end private :xmethod, :zmethod end 

这是否certificate你的问题?

正如其他人已经指出的那样,公约就是在一个私人阶层的底部把私人的方法放在底层。 不过,你也许应该知道,许多程序员使用双重缩进(4个空格而不是2个)方法。 原因是通常你不会在你的文本编辑器中看到“私有”,并假设它们可能是公开的。 看下面的插图:

 class FooBar def some_public_method end def another_public_method end private def some_private_method end def another_private method end end 

这种方法应该防止你不得不上下滚动,并使其他程序员在代码中更加舒适。

自从Ruby 2.1以来,也可以select将方法定义隐藏起来。

 class Example def xmethod end private def ymethod end private def zmethod end end 

看看这个定义,你立即知道一个方法是否是私有的,不pipe它定义在哪个文件中。 这是更多的打字(如果你不自动完成),并不是所有的def将很好地alignment。

我认为公共方法是对象的某种接口,把它们放在最显眼的地方,也就是文件的顶端是合乎逻辑的。

每种方法上面都不需要publicprivate 。 我通常把我所有的私人方法都放在课堂的底部。 另外,由于默认方法是公开的,因此不必明确地public表示。 例如:

 class FooBar def some_public_method end def another_public_method end private def some_private_method end def another_private method end end 

我来自java背景,我讨厌不得不滚动查看方法types。 我认为这是疯狂的,不能指定方法可见性每个方法没有丑。 所以我最终在每个吸引方法之前发表了一条评论#private ,然后声明private :...

我不喜欢为每种方法指定公有或私有的。 把所有的私有方法放在底部,让我有一个“私人”的单个实例每个文件。 我想这是一个品味的问题。

一种风格是把方法组合在一起,这样你最多只能使用private ,每个类protected一次。 另一种方式是在方法定义之后指定可见性:

 class Example def my_private_method end private :my_private_method def my_public_method end end 

从Ruby 2.1.0开始, def将方法名称作为符号返回,因此可以使用更简化的样式:

 class Example private def my_private_method end def my_public_method end protected def my_protected_method end private_class_method def self.my_private_class_method end end 

(请注意,我们对类方法使用private_class_method – 否则我们会得到NameError: undefined method因为private需要一个实例方法,即使像在原始例子中那样将它用作macros,它只影响实例方法的可见性。

我最喜欢这种内联可见性风格,因为它允许您按照自己的意愿组织方法。 它降低了在错误的地方添加新方法的风险,并且不经意间将其私有化。

至于类方法的语法,你可以这样处理:

 class Example private def my_private_method end class << self private def my_private_class_method end end end 

这是一个口味的问题,我想,但我宁愿明确地命名每个方法私人在所述的方法之后像这样:

  class Example def cthulhu end def rlyeh end def foo end private :foo def bar end private :bar def baz end private :baz end 

丹尼斯有一个完美的答案,那就是,当使用ruby> = 2.1时,只需在private(或protected,public)

但我相信,现在也可以使用私人作为块,如:

 private begin def foo end def bar end end def zip end