Is inject the same thing as reduce in ruby?

I saw that they were documented together here. Are they the same thing? Why does Ruby have so many aliases (such as map/collect for arrays)? Thanks a lot.

32784 次浏览

是的,在许多其他编程语言和数学中,它也被称为 fold。为了让不同背景的程序员更加直观,Ruby 使用了很多别名。如果您想在 Array上使用 #length,则可以。如果你想使用 #size,这也很好!

最新版本的 Enumerable#reduce文档明确指出:

injectreduce方法是别名。

它们是一样的吗?

是的,别名最终会运行完全相同的代码。

为什么 Ruby 有这么多别名(比如数组的 map/Collection) ?

归根结底是语言的方法

不同的语言有不同的方法,我试过 想象一下:

enter image description here

Ruby 这样做有利于开发人员的生产力。基本上,通过使用别名,你可以让来自不同编程语言 还有人类语言背景的程序员更直观地编写代码。

但是,它们也可以帮助您的代码更加清晰,因为有些东西可能具有不同的语义可能性,比如 midnight()方法也可以表示为 start_of_dayend_of_day。根据上下文,这些内容可以更加清楚。

顺便说一下,一些程序员也使用 injectreduce来区分不同的语义情况。