Il n'y a pas de différence, en fait map
est mis en œuvre dans le C rb_ary_collect
et enum_collect
(eg. il y a une différence entre map
sur un tableau et sur toute autre enum, mais pas de différence entre map
et collect
).
Pourquoi faire les deux map
et collect
existent en Ruby? L' map
fonction a beaucoup de conventions de noms dans différentes langues. Wikipedia fournit une vue d'ensemble:
La fonction map origine dans les langages de programmation fonctionnelle, mais est aujourd'hui pris en charge (ou peut être défini) dans de nombreuses procédural, orienté objet, et multi-paradigme langues: En C++Standard Template Library), il est appelé transform
, en C# (3.0)'s LINQ bibliothèque, il est fourni comme une extension de la méthode appelée Select
. La carte est également l'un des plus fréquemment utilisés opération à haut niveau des langages tels que Perl, Python et Ruby; l'opération est appelée map
dans chacun de ces trois langues. Un collect
alias pour carte est également fourni en Ruby (à partir de Smalltalk) [c'est moi qui souligne]. Common Lisp fournit une famille de la carte-comme les fonctions, l'une correspondant au comportement décrit ici est appelé mapcar
(-véhicule indiquant l'accès à l'aide de l'utilisation d'une VOITURE).
Ruby fournit un alias pour les programmeurs de la Causerie monde pour se sentir plus à l'aise.
Pourquoi est-il une mise en œuvre différente pour les tableaux et les énumérations? Un enum est généralisée itération de la structure, ce qui signifie qu'il n'y a aucune façon de Ruby peut prédire ce que l'élément suivant peut être (vous pouvez définir l'infini des enums, voir le Premier pour un exemple). Par conséquent, il doit appeler une fonction à chaque élément successif (généralement, ce sera l' each
méthode).
Les tableaux sont de collecte les plus courantes et il est donc raisonnable d'optimiser leurs performances. Depuis Ruby sait beaucoup de choses sur la façon dont les matrices de travail, il n'a pas à appeler each
mais ne peut utiliser de simples de manipulation du pointeur qui est nettement plus rapide.
Similaire optimisations existent pour un certain nombre de méthodes de Tableau comme zip
ou count
.