¿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.

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!


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.


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.