Pregunta

(Perdón por la pregunta novato.) En Ruby, ¿cuál es la diferencia entre los bucles:

@cars.each do |car| 

y

for car in @cars do

¿hay una diferencia en la eficiencia, o ¿por qué necesitamos dos (o más) formas de expresar la misma cosa? La segunda forma parece más elegante / natural para mí, pero es posible que falte alguna observación crucial, ¿por qué la primera puede ser la mejor opción.

¿Fue útil?

Solución

más personas utilizan la notación @cars.each porque que generaliza a otros métodos (como #inject, #each_with_index, #map, etc, así como las devoluciones de llamada no iterador).

para / en es principalmente el azúcar solo sintáctica para #each. La principal diferencia en cómo los dos trabajos es en ámbito de las variables:

irb> @cars = %w{ ford chevy honda toyota }
#=> ["ford", "chevy", "honda", "toyota"]
irb> @cars.each { |car| puts car }
ford
chevy
honda
toyota
#=> ["ford", "chevy", "honda", "toyota"]
irb> car
NameError: undefined local variable or method `car` for #<Object:0x399770 @cars=["ford", "chevy", "honda", "toyota"]>
        from (irb):3
        from /usr/local/bin/irb:12:in `<main>`
irb> for car in @cars
     puts car.reverse
     end
drof
yvehc
adnoh
atoyot
#=> ["ford", "chevy", "honda", "toyota"]
irb> car
#=> "toyota"

para / en hojas de la variable de iteración en su alcance después, mientras #each no lo hace.

En lo personal, nunca utilice de rubí para / en la sintaxis.

Otros consejos

Creo que es simplemente azúcar sintáctica. Es funcionalmente equivalente, y no estoy al tanto de cualquier diferencia aplicación en el intérprete.

Nota -. Se puede perder el 'hacer' en el segundo

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top