¿Es lo mismo inyectar que reducir en rubí?

114

Vi que estaban documentados juntos aquí . ¿Son la misma cosa? ¿Por qué Ruby tiene tantos alias (como mapa / recopilación para matrices)? Muchas gracias.

Jacky
fuente

Respuestas:

160

Sí, y también se llama folden muchos otros lenguajes de programación y en Matemáticas. Ruby utiliza muchos alias para ser intuitivo para programadores con diferentes antecedentes. Si quieres usarlo #lengthen un Array, puedes. Si quieres usar #size, ¡también está bien!

Zach
fuente
4
Si desea crear sus propios alias, puede que le interese alias_method .
Nick McCurdy
23
#length y #count no son equivalentes en Ruby. #length y #size son.
Preguntas de Quolonel
9
3.length da NoMethodError; 3.size devuelve 4. Obviamente, 3 no es una matriz, ¡pero tenga cuidado con la escritura de pato! (3_000_000_000_000_000.size devuelve 8 y 3_000_000_000_000_000_000_000_000_000_000_000_000_000_000.size devuelve 20; parece ser la cantidad de memoria que ocupa.)
ChrisPhoenix
18
hm, creo que los documentos actuales de Ruby ruby-doc.org/core-2.2.3/Enumerable.html#method-i-reduce podrían ser mejores si solo dicen lo mismo injectpara que los usuarios no tengan que leer los dos descripción e intente averiguar si son iguales ... ¿no va esto con el principio DRY?
nopolaridad
3
@ 太極 者 無極 而 生, buen punto, estaba confundido por esto tal como lo predijeron
neontapir
6

Las versiones más recientes de la documentación de Enumerable#reduceespecificarlo explícitamente:

Los métodos injecty reduceson alias. No hay ningún beneficio de rendimiento para ninguno de los dos.

axiaco
fuente
1
me gusta separarlos en función de cómo se usa, obviamente solo para la semántica. si es un proc ( &:+), reducir, si es un bloque, inyectar
TheRealMrCrowley