Suma de elementos de un array, problema

Hola, estoy empezando con Ruby y estoy haciendo unos tutoriales que
encontré en http://rubytutorial.wikidot.com En el capítulo que habla
sobre Arrays, uno de los ejercicios propuestos es sumar los elementos
que hay almacenados en un vector.

Había planteado el programa de la siguiente manera pero todo el rato
tengo errores que no sé como depurar.

1-He creado una función que suma dos números para sumar el componente
del array correspondiente más las sumas anteriores.

2-He inicializado el sumador parcial (buffer) como 0, para que en la
primera iteración se almacene el primero de los componentes del vector.

3-He intentado hacer la suma de los elementos del vector.


vect = [1, 2, 3, 4, 5]

def suma(num,buffer)
suma = num + buffer
return suma
end

parcial=0

vect.each do |vect|
sumador = suma(vect,parcial)
parcial = sumador
return sumador
end


El error que me da es el siguiente:

unapruebamas.rb:174:in block in <main>': unexpected return (LocalJumpError) from unapruebamas.rb:171:in each’
from unapruebamas.rb:171:in `’

La fila 171 se corresponde con la de VECT.EACH…

Estoy bastante perdido. Agradecería cualquier tipo de pista :slight_smile:

Pablo.

Hi,

This isn’t the spanish Ruby group, so use English, please.

The error message is telling you that you cannot use “return” in this
context (you’re not in a method). I’m not even sure what you want.
Return from the “each” method? Jump to the next element? As far as I can
tell, you don’t need any of this, so just delete the “return sumador”.

In fact, your code is quite complicated for this simple task. Do you
really need a method just to add two numbers?

I’d simply do this:

vect = [1, 2, 3, 4, 5]
sum = 0
vect.each do |number|
sum += number
end

That’s it. Ruby also has a method for this kind of operation:
Enumerable#inject

So you could boil it down to:

vect = [1, 2, 3, 4, 5]
vect.reduce :+

2012/9/28 Pablo D. [email protected]:

suma = num + buffer

Estoy bastante perdido. Agradecera cualquier tipo de pista :slight_smile:

Hola Pablo. Lo primero es que esta lista es en ingles, no s si en
general tendrs muchas respuestas.
Lo segundo, return es para salir de una funcion, no lo puedes usar en un
bloque.
Yo creo que simplemente quitandolo ya te funcionaria.

Suerte con el Ruby, sigue adelante y vers cmo luego hay otras
maneras ms sencillas de hacer estas tareas.

Jesus.