注入和减少红宝石一样吗?


114

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

Answers:


160

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


4
如果要创建自己的别名,则可能对alias_method感兴趣。
尼克·麦卡迪

23
#length和#count在Ruby中不等效。#length和#size是。
Quolonel问题

9
3.length给出NoMethodError; 3.size返回4。显然3不是数组,但是要当心鸭子输入!(3_000_000_000_000_000.size返回8,而3_000_000_000_000_000_000_000_000_000_000_000_000_000_000.size返回20;这似乎是占用的内存量。)
ChrisPhoenix 2014年

18
嗯,我认为当前的Ruby文档ruby-doc.org/core-2.2.3/Enumerable.html#method-i-reduce如果说的相同,可能会更好,inject这样用户不必阅读两者描述并尝试找出它们是否相同...这不符合DRY原理吗?
nonopolarity 2015年

3
@太极者无极而生,好点,正如您所断言的那样,我对此感到困惑
neontapir

6

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

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


1
我喜欢根据使用方式将它们分开,显然只是为了语义。如果是proc(&:+),请减少;如果是块,请注入
TheRealMrCrowley '18年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.