No hay diferencia, de hecho map
se implementa en C como rb_ary_collect
y enum_collect
(por ejemplo., Hay una diferencia entre map
en una matriz y en cualquier otro enum, pero no hay diferencia entre map
y collect
) .
¿Por qué tanto map
y collect
existen en Ruby? La función map
tiene muchas convenciones de nombres en diferentes idiomas. Wikipedia provides an overview:
La función de mapa se originó en los lenguajes de programación funcionales, pero es apoyado hoy (o se puede definir) en muchos lenguajes de procedimientos, orientación a objetos, y multi-paradigma, así: En la Biblioteca de plantillas estándar C++ 's, se le llama transform
, en la biblioteca LINQ de C# (3.0), se proporciona como un método de extensión llamado Select
. Map es también una operación utilizada frecuentemente en lenguajes de alto nivel como Perl, Python y Ruby; la operación se llama map
en los tres idiomas. Un alias collect
para el mapa también se proporciona en Ruby (de Smalltalk) [énfasis mío]. Common Lisp proporciona una familia de funciones tipo mapa; el que corresponde al comportamiento descrito aquí se llama mapcar
(-car que indica el acceso usando la operación CAR).
Ruby proporciona un alias para que los programadores del mundo Smalltalk se sientan como en casa.
Por qué hay una aplicación diferente para las matrices y las enumeraciones? Una enumeración es una estructura de iteración generalizada, lo que significa que no hay forma en que Ruby puede predecir cuál será el siguiente elemento puede ser (se puede definir enumeraciones infinitas, ver Prime para un ejemplo). Por lo tanto, debe llamar a una función para obtener cada elemento sucesivo (por lo general, este será el método each
).
Las matrices son la colección más común, por lo que es razonable optimizar su rendimiento. Como Ruby sabe mucho sobre cómo funcionan las matrices, no tiene que llamar al each
, pero solo puede usar el pointer manipulation, que es significativamente más rápido.
Existen optimizaciones similares para una serie de métodos de matriz como zip
o count
.
'map' se prefiere en [Código de Golf] (http://codegolf.stackexchange.com/questions). –
Como una explicación de por qué 'map' se prefiere en CodeGolf, lo que podría no ser obvio para todos: es solo porque' collect' es cuatro caracteres más largos que 'map', pero lo mismo en funcionalidad. –