Quelle est la “carte” la méthode le faire en Ruby?
Je suis nouveau en programmation. Quelqu'un peut m'expliquer ce que .map
ferait dans:
params = (0...param_count).map
- Posez une question à la fois.
map
est une commune "fonctionnelle" méthode trouvée sur Énumération des objets utilisés pour transformer les valeurs dans une séquence (avec des considérations spéciales)...
et...
sont des moyens de créer des plages. Aussi, de se familiariser avec le REPL, où vous pouvez essayer ce genre de choses vous-même! 🙂 - REPL pour le rubis est la cisr pour les Rails, il est rails c. REPL vous permet de tester le code directement à l'encontre de la langue shell lui-même.
Vous devez vous connecter pour publier un commentaire.
La
map
méthode prend un objet énumérable et d'un bloc, et exécute le bloc pour chaque élément, en sortie de chaque valeur retournée par le bloc (de l'objet d'origine est inchangé, sauf si vous utilisezmap!)
:Array
etRange
sont énumérables types.map
avec un bloc retourne un Tableau.map!
se transforme le tableau d'origine.Où est-ce utile, et quelle est la différence entre
map!
eteach
? Voici un exemple:La sortie:
each
etmap
fonctionne de la même manière, mais touteach
est un itérateur seulement,map
amap!
forme, qui transforme un objet donné. Aussimap
a uncollect
synonyme avec pas de différences.#map
ne fait pas muter n'importe quoi,#map!
n'.map
comme si c'étaitmap!
map
, avecselect
eteach
est l'un des Rubis de chevaux de trait dans mon code.Il vous permet d'exécuter une opération sur chacun de vos tableau d'objets et de les renvoyer tous dans le même endroit. Un exemple serait d'incrémenter un tableau de nombres par un:
Si vous pouvez exécuter une méthode unique sur votre éléments du tableau, vous pouvez le faire dans un texte-style comme:
Pour ce faire avec l'exemple ci-dessus que vous avez à faire quelque chose comme ceci
Plus simplement utiliser l'esperluette raccourci technique, prenons un autre exemple:
De transformer des données en Ruby implique souvent une cascade de
map
opérations. Étudemap
&select
, ils sont quelques-uns des plus utiles méthodes Ruby dans la bibliothèque du primaire. Ils sont aussi importants queeach
.(
map
est aussi un alias pourcollect
. Utilisez ce qui fonctionne le mieux pour vous sur le plan conceptuel.)Informations plus utiles:
Si le Énumérable objet que vous êtes en cours d'exécution
each
oumap
sur contient un ensemble Énumérable éléments (tables de hachage, les tableaux), vous pouvez déclarer chacun de ces éléments à l'intérieur de votre bloc de tubes comme:Dans le cas d'une table de Hachage (également un
Enumerable
objet, une table de Hachage est tout simplement un tableau de n-uplets avec des instructions spéciales pour l'interprète). La première "pipe paramètre" est la clé, la deuxième est la valeur.Pour répondre à la question réelle:
En supposant que
params
est une table de hachage, ce serait le meilleur moyen de la carte à travers: Utiliser deux paramètres de bloc au lieu d'une pour la capture de la clé & valeur paire pour chaque interprété tuple dans la table de hachage.NoMethodError: private method 'plusone' called for 1:Fixnum
en ruby 2 et "mauvais nombre d'arguments" en ruby 1.9/1.8. De toute façon, j'ai utilisé un lambda:plusone = ->(x) { x + 1 }
sortir le symbole rédacteur de devis:[1,2,3].map(&plusone)
.private
à l'intérieur de la classe dans laquelle vous mettez votre méthode avant de mettre votre méthodedef self.methodnam
. Ce que j'ai fait ci-dessus est de créer exemple méthodes viadef methodnam
.À l'aide de ruby 2.4 vous pouvez faire la même chose en utilisant
transform_values
, cette fonction extrait de rails ruby.0..param_count
signifie "jusqu'à et y compris param_count".0...param_count
signifie "jusqu'à, mais pas y compris param_count".Range#map
ne renvoie pas unEnumerable
, il fait les cartes à un tableau. C'est le même queRange#to_a
.Il "cartes" d'une fonction à chaque élément dans un
Enumerable
- dans ce cas, une gamme. Alors il appelle le bloc passé une seule fois pour chaque nombre entier de 0 àparam_count
(exclusif - vous avez raison sur les points) et retourne un tableau contenant chaque valeur de retour.Voici la documentation de
Énumérable#map
. Il dispose également d'un alias,collect
.Range#map
en fait la convertit en un tableau.Enumerable
, comme chaque. Je le croyais.Carte est une partie de l'énumérable module. Très similaire à "recueillir", Par Exemple:
Carte fournit des valeurs d'une itération dans un tableau qui lui sont renvoyées par le bloc de paramètres.