我看到它们在这里一起记录:here。它们是同一个东西吗?为什么Ruby有这么多别名(例如数组的map/collect)?非常感谢。
是的,在许多其他编程语言和数学中,这也被称为fold
。Ruby使用很多别名,以便对具有不同背景的程序员具有直观性。如果您想在Array
上使用#length
,可以。如果您想使用#size
,也可以!
最近版本的Enumerable#reduce
文档明确指出:
inject
和reduce
方法是别名,它们之间没有性能优劣之分。
&:+
),则缩减;如果它是一个块,则注入。 - TheRealMrCrowley它们是同一件事吗?
是的,别名最终运行完全相同的代码。
为什么Ruby有这么多别名(例如数组的map / collect)?
这归结于语言的方法。
不同的语言有不同的方法,我尝试在这里将其可视化:
Ruby之所以这样做是为了开发人员的生产力。基本上,通过使用别名,你可以使来自不同编程语言和人类语言背景的程序员更直观地编写代码。
但是,别名也可以帮助你的代码清晰度,因为有些事情可能具有不同的语义可能性,比如方法midnight()
也可以表达为 start_of_day
或end_of_day
。根据上下文这些可能更清晰。
顺便说一句,有些程序员使用inject
和reduce
来区分不同的语义情况。
inject
相同,这样用户就不必阅读两个描述并尝试弄清它们是否相同... 这不符合 DRY 原则吗? - nonopolarity