Le "jusqu'à" la méthode en Ruby
Je suis en train d'apprendre le Ruby, et il y a eu un peu de parler de la upto
méthode dans le livre dont je suis l'apprentissage. Je suis confus. Exactement ce que fait-il?
Exemple:
grades = [88,99,73,56,87,64]
sum = 0
0.upto(grades.length - 1) do |loop_index|
sum += grades[loop_index]
end
average = sum/grades.length
puts average
Vous voudrez peut-être chercher un autre livre. Dans ce cas, ce
Nous espérons que votre livre n'est pas en disant
Beaucoup de Ruby livres sont comme ça - ils vous dire exactement ce Ruby, mais pas pourquoi, vous pouvez utiliser un chemin plutôt qu'un autre. 🙁
Oh. Mon. Gawd. Cela a eu à la crappiest du code Ruby, j'ai jamais vu. Est-ce vraiment de code à partir d'un livre?
Oui, c'est à partir d'un livre, Début Ruby on Rails par Steven Holzner
upto
< grades.length.times
< grades.each
< grades.inject(0, :+)
.Nous espérons que votre livre n'est pas en disant
upto
est un opérateur; c'est une méthode régulière. Édité à votre question en conséquence.Beaucoup de Ruby livres sont comme ça - ils vous dire exactement ce Ruby, mais pas pourquoi, vous pouvez utiliser un chemin plutôt qu'un autre. 🙁
Oh. Mon. Gawd. Cela a eu à la crappiest du code Ruby, j'ai jamais vu. Est-ce vraiment de code à partir d'un livre?
Oui, c'est à partir d'un livre, Début Ruby on Rails par Steven Holzner
OriginalL'auteur Billjk | 2012-03-15
Vous devez vous connecter pour publier un commentaire.
Essayons une explication:
Vous définissez un tableau
et de préparer une variable pour stocker la somme:
grades.length
est de 6 (il y a 6 éléments dans le tableau),(grades.length - 1)
est 5.avec
0.upto(5)
vous boucle de 0 à 5,loop_index
sera de 0, puis 1...Le premier élément du tableau est
grades[0]
(l'index dans le tableau commence à 0).C'est pourquoi vous devez soustraire 1 au nombre d'éléments.
Ajouter le loop_index de la valeur de la somme.
Maintenant, vous en boucle sur chaque élément et avoir la somme de tous les éléments de la matrice.
Vous pouvez calculer la moyenne:
Maintenant vous écrire le résultat sur la sortie standard:
C'était un non-ruby-comme de la syntaxe. Ruby-comme vous le feriez comme ceci:
Additif à base de Marc-André commentaire:
Vous pouvez aussi utiliser le
inject
pour éviter de définir la somme initiale:Ou encore plus court:
foo = start, enum.each{|i| foo = some_function(foo, i)}
est un modèle pour qui Rubyist pouvez utiliserinject
.Merci pour l'astuce avec l'injection. Cette méthode fait toujours des nœuds dans mon cerveau 😉
OriginalL'auteur knut
De http://www.ruby-doc.org/docs/ProgrammingRuby/html/ref_c_integer.html#upto:
OriginalL'auteur Oliver Charlesworth
Jusqu'à exécute le bloc donné une fois pour chaque numéro à partir du numéro d'origine "jusqu'à" l'argument passé. Par exemple:
permet d'imprimer les nombres de 1 à 10.
OriginalL'auteur teleolurian
C'est juste une autre façon de faire une boucle/itérateur en Ruby. Il dit faire cette action n fois en fonction de i étant le premier nombre de la le nombre en parens que la limite.
OriginalL'auteur ScottJShea
Une alternative qui ressemble plus à Ruby pour moi, c'est
Bien sûr, cela dépend de ce que vous faites.
OriginalL'auteur jndaigle
Mon exemple, serait ce:
Donc ce que vous êtes en train de faire ici est de dire, je veux compter à partir de 1 au nombre de 5, c'est précisément ce que cette partie est de dire:
La dernière partie de code (un bloc) est juste à la sortie de l'itération de passer par le comte de 1 à 5. C'est la sortie que vous pourriez vous attendre à voir:
Note: Cela peut être écrite d'une autre façon, si vous utilisez multilines:
Espère que cette aide.
OriginalL'auteur Chris Pettitt