在Ruby API中,我注意到很多方法都有别名。例如,要迭代String
中的行,我可以调用str.lines
或str.each_line
。
您如何决定使用哪一个?是否有一些别名被弃用并保留历史原因?或者别名只是Ruby哲学的一部分,有许多方法可以做同样的事情并根据可读代码进行选择吗?
答案 0 :(得分:6)
通常会提供许多执行相同操作的方法,以使您的代码更具表现力并且“像句子一样”。
#lines
可能会使此代码更像一个句子:
if paragraph.lines.count < 3
puts "Your paragraph is small and pathetic."
end
虽然#each_line
可能会更好地阅读:
report_file.each_line do |line|
process line
end
答案 1 :(得分:3)
我的建议是选择方法的名称,使您的代码最不言自明。 此外,有些方法比其他方法更常用,选择其他开发人员最快理解的名称也是个好主意。
答案 2 :(得分:3)
在大多数情况下,这取决于您最适合哪种背景。对于那些对于Ruby人来说collect
而对于那些喜欢Perl样式的人而言,Enumerable充满了别名,即使它们完全相同。
如果您正在处理已经建立了优先选择的代码库,请尝试保持一致。如果您正在开发新的东西,那么您可以自由选择,但我建议选择需要最少解释的那个给另一个开发人员。
有时候有两种方法可以做。 map
曾经在Ruby 1.8.7中返回一个行数组,但后来经过改进以获取一个块,并给出了String#lines
的别名,以反映它现在是一个迭代器。
你会不时发现这样的历史文物。如果您正在处理必须与Ruby 1.8.7兼容的东西,那么您将不得不选择在该环境中有效的方法。
答案 3 :(得分:2)
实际上,除非您的组织有特定的规则,否则它是程序员的选择。这些别名用于提供开发人员根据其使用其他语言的历史记录可能更熟悉的替代名称。