Answers:
在我看来,最好的做法是依次进行声明而不是私有的方法。
最后,您只需添加以下内容即可将任何方法设为私有: private :xmethod
例:
class Example
def xmethod
end
def ymethod
end
def zmethod
end
private :xmethod, :zmethod
end
这是否可以证明您的问题?
private从Ruby 2.1开始,还可以选择在方法定义之前。
class Example
def xmethod
end
private def ymethod
end
private def zmethod
end
end
查看定义,您可以立即知道方法是否是私有的,无论它在文件中的何处定义。输入的内容要多一些(如果您不自动填充的话),并且并不是所有的defs都可以很好地对齐。
private之前仅添加一次ymethod也可以。无需多次添加。
zmethod没有的private方法,则该方法不是私有的。因此,您需要重复一次(至少在Ruby 2.3中如此)。
正如其他人已经指出的那样,约定是将私有方法放在一个私有类的底部。但是,您可能还应该知道,许多程序员为此使用了双缩进(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
此方法应避免您上下滚动,并使其他程序员对您的代码更满意。
begin..end后面直接格式化private private。然后,缩进可以由编辑器自动设置,因为begin(在上面的示例中)内部的代码在语义上缩进了4个空格。
public,然后private
您无需将每种方法放在上面public或private上面。我通常将所有私有方法放在类的底部。另外,不必显式说明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背景,我讨厌不得不滚动查看方法类型。我认为不能在没有丑陋的情况下为每种方法指定方法可见性是很疯狂的。因此,我最终#private在每个suck方法之前添加了一条注释,然后进行了声明private :...。
private def method...使它变得更好
一种风格是一群方法一起使用,让你只使用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预期的实例方法使用它,即使作为一个宏像原来的例子,只会影响的实例方法的可见性。)
我最喜欢这种内联可见性样式,因为它允许您根据需要组织方法。这样可以减少在错误的位置添加新方法并无意中将其私有化的风险。
至于类方法的语法,您可以这样处理:
class Example
private def my_private_method
end
class << self
private def my_private_class_method
end
end
end
private_class_method调用的地方,关于class << self避免使用该块的最后一部分是一个很好的技巧。直到现在,我还不知道“规范”类方法(用声明的def self.foo; end而不是class << self; def foo; end不会受到说明private符的影响。)
我通常按以下方式订购我的方法:
private,只写一次我在编辑器中使用了“转到定义”功能,这样就不会涉及太多的滚动,在任何情况下,如果该类足够大而无法滚动,则可能应该将其分为几个类。
to_s在公共部分的末尾放置转换方法(例如)。
private def my_method...end