Vamos a intentar una explicación:
Se define una matriz
grades = [88,99,73,56,87,64]
y preparar una variable para almacenar la suma:
sum = 0
grades.length
es 6 (hay 6 elementos en el matriz), (grades.length - 1)
es 5.
con 0.upto(5)
bucle de 0 a 5, loop_index
será 0, luego 1 ...
El primer elemento de la matriz es grades[0]
(el índice en la matriz comienza con 0). Es por eso que tienes que restar 1 de la cantidad de elementos.
0.upto(grades.length - 1) do |loop_index|
Agregue el valor de loop_index a sum.
sum += grades[loop_index]
end
Ahora bucle en cada elemento y tener la suma de todos los elementos de la matriz.
Se puede calcular el promedio:
average = sum/grades.length
Ahora se escribe el resultado en la salida estándar:
puts average
Este fue un no-rubí sintaxis similar . Rubí igual que lo haría así:
grades = [88,99,73,56,87,64]
sum = 0
grades.each do |value|
sum += value
end
average = sum/grades.length
puts average
Adición basado en Marc-Andrés comentario:
Es posible utilizar también inject
para evitar definir la suma inicial:
grades = [88,99,73,56,87,64]
sum = grades.inject do |sum, value|
sum + value
end
average = sum/grades.length
puts average
O incluso más corto:
grades = [88,99,73,56,87,64]
average = grades.inject(:+)/grades.length
puts average
Es posible que desee buscar otro libro. En este caso, este 'upto' <' grades.length.times' <'grades.each' <' grades.inject (0,: +) '. –
Afortunadamente su libro no dice 'upto' es un operador; es un método regular Editó su pregunta en consecuencia. –
@ Marc-AndréLafortune Muchos de los libros de Ruby son así, te dicen exactamente * qué * tiene Ruby, pero no * por qué * usarías de una forma sobre otra. :( –