注入与红宝石中的减少相同的东西?

时间:2012-12-11 03:37:33

标签: ruby alias reduce inject

我看到他们被记录在一起here。它们是一样的吗?为什么Ruby有这么多别名(比如数组的map / collect)?非常感谢。

3 个答案:

答案 0 :(得分:153)

是的,在许多其他编程语言和数学中它也被称为fold。 Ruby别名很多,以便对具有不同背景的程序员直观。如果您想在#length上使用Array,则可以。如果你想使用#size,那也没关系!

答案 1 :(得分:3)

Enumerable#reduce文档的更新版本明确指定了它:

  

injectreduce方法是别名。两者都没有性能优势。

答案 2 :(得分:0)

<块引用>

它们是一样的吗?

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

<块引用>

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

归结为语言的方法

不同的语言有不同的方法,我尝试visualize it here

enter image description here

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

然而,它们也可以帮助您的代码清晰,因为有些事物可能具有不同的语义可能性,例如方法 midnight() 也可以表示为 start_of_dayend_of_day。根据上下文,这些可能会更清楚。

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