1
votes

Différence entre {met a} et {| a | met un} dans Ruby?

Pendant que je travaillais sur un didacticiel Ruby, je les ai vus utiliser la deuxième méthode d'impression de la liste entière, | a | met un, mais je me demandais pourquoi ils n'ont pas simplement tapé met un , et l'essayer moi-même, en utilisant met a imprime la liste deux fois et je n'ai pas trouvé pourquoi

irb(main):001:0> a = ['hello', 'hi']
=> ["hello", "hi"]
irb(main):002:0> a.each {puts a}
hello
hi
hello
hi
=> ["hello", "hi"]
irb(main):03:0> a.each {|a| puts a}
hello
hi
=> ["hello", "hi"]

En gros, quelle est la différence entre ces deux. merci d'avance, et désolé si je suis un doof


1 commentaires

Vous pouvez écrire simplement met un au lieu de a.each {| a | met un} .


3 Réponses :


0
votes
a.each {|item| puts item}

1 commentaires

"renverra le tableau entier" - Bien que cela soit vrai, c'est terriblement trompeur. Vos trois exemples renverront le tableau entier, car c'est ainsi que chaque est défini: il exécute les effets secondaires du bloc puis renvoie son récepteur. Donc, dans une réponse à la question du PO sur la différence , vous mentionnez dans votre première phrase la une chose qui est la même .



4
votes
a.each { |a| puts a }
a.each { |foo| puts foo }

2 commentaires

ah, merci pour la perspicacité, toujours un débutant à Ruby afin que je puisse être reconnaissant aux gens comme vous êtes là :)


@ ThePanMan321: heureux d'aider et je salue le désir de jouer, mais maaaaaybe la prochaine fois si vous avez une question comme celle-ci, finissez d'abord le livre / tutoriel. Certains livres présentent des informations de manière progressivement détaillée. Il y a de fortes chances que la réponse se trouve dans deux chapitres. Peut-être que c'est juste moi, mais j'apprécie ces "aha!" moments, quand les choses se mettent en place. Avoir quelqu'un pour me le remettre sur un plateau vole une partie de plaisir. IMHO (évidemment), faites ce qui fonctionne pour vous.



0
votes

@ ThePanMan321: Le bloc est exécuté une fois pour chaque élément du tableau. Par conséquent, dans votre cas, il est exécuté deux fois. Donc le premier cas est équivalent à

a.each {|goofy| puts goofy}

, vous obtenez le double du tableau en cours d'impression.

Dans le second cas, le deuxième a est ombrage le a extérieur désignant le tableau. Vraiment mauvais style. C'est équivalent à

a.size.times {puts a}

et vous ne voyez donc chaque élément du tableau qu'une seule fois.


1 commentaires

@SergioTulentsev: Je voulais donner explicitement un code équivalent, ce qui pourrait aider l'OP à mieux comprendre ce qui se passe réellement ici.