2010-07-02 2 views
3

Chaque fois que je vois le code Ruby qui dit:Pourquoi Array.map() de Ruby est-il également appelé Array.collect()?

arrayNames.collect { ... } 

J'oublie ce que la collecte est et doivent rechercher ce qu'il est, et constater qu'il est le même que la carte(). La carte, je peux comprendre, mappant 1 octet à un pixel, et la fonction est de mapper un x à ay, un 2 à un 4, un 5 à un 25, etc. Mais d'où vient le nom "recueillir" venir de? Peut-être que cela aidera à se souvenir de ce qu'est une méthode de "collecte".

+1

à undestand sens de Collect que de carte lorsque j'ai commencé à l'aide de rubis. –

+0

@Daniel, pour les personnes ayant des connaissances en mathématiques (dont disposent de nombreux programmeurs), il est plus facile de comprendre le "mapping". –

Répondre

4

Pour ajouter aux autres réponses, il est en quelque sorte un intérieur blague en Smalltalk:

  • inject:into:
  • collect:
  • select:
  • reject:
  • detect:

Repérer le motif? En fait, je l'ai trouvé plus facile

+0

est-ce que smalltalk a aussi "inspecté"? –

+0

@Jian Lin: Dans Smalltalk, l'IDE graphique, l'IDE, l'éditeur de texte, la langue, l'application et le compilateur sont tous identiques. Par conséquent, il n'a pas de méthode 'inspect' comme Ruby, mais plutôt une fenêtre' Inspector' qui vous permet d'inspecter des objets arbitraires. Les méthodes '... ect' sont toutes des méthodes de collecte. –

+0

Ceci est rendu la réponse officielle car il a donné une raison pour laquelle le mot collect' peut être utilisé au lieu de 'map' et un bon dispositif de mémoire pour se rappeler l'étrange' 'collect' est en effet map'. –

5

Il vient de vieux jours Smalltalk. Smalltalk utilisé collect et select au lieu de map et filter (utilisé dans de nombreuses autres langues) pour itérer sur ses collections.

+0

hm ... et parler de Ruby ne pas avoir une méthode 'filter' ... –

+0

et Perl utilise' grep' au lieu de 'filter', mais vous voyez l'idée. – kriss

+0

Merci pour la perspicacité. Eh bien, je ne peux pas dire que j'ai trouvé l'un d'entre eux non intuitif ou difficile à retenir, juste était légèrement confus quelle variante est plus idiomatique? Je préfère la 'carte' (plus courte, plus familière) - mais les deux sont là pour rester, utilisés aussi bien par les gourous? – inger

3

kriss est vrai que le nom de la méthode a ses origines dans Smalltalk mais pour vous aider à vous souvenir de ce qu'il fait quand vous le voyez, vous pouvez le considérer comme "collecter les résultats du bloc dans un nouveau tableau".

+1

Quand c'est Array.sort, Array.shuffle, Array.uniq, je penserais aussi à collecter les résultats aussi. D'un autre côté, si vous pensez à "collection", cela peut être lié au concept de set de maths. –

Questions connexes