2011-10-09 3 views
5

Duplicar posible:
Is there a reason that we cannot iterate on “reverse Range” in ruby?¿Por qué no retroceder para el trabajo de bucle en ruby? p.ej. para i en 10..1

Esto funciona como magia.

for i in 1..10 
    ... 
end 

¿No es intuitivo que este lazo hacia atrás también funcione?

for i in 10..1 
    ... 
end 

Si hay alguna razón sintáctica por qué esto no debería funcionar, me siento como el rubí tiene que ser cambiado para permitirlo. Simplemente es intuitivo escribir hacia atrás para el bucle de esa manera.

+1

¿Está buscando soluciones o razones por las que no trabajo real? – slhck

+0

Solo me pregunto por qué no funciona. Estoy al tanto de otras alternativas. –

+0

@closevoters: suficiente pregunta de novato. Esperaba que '10..1' funcionara cuando comencé a programar Ruby. –

Respuesta

11

1..10 es de rango de clase, no está directamente relacionado con ninguna construcción de bucle. Y no hay números que sean mayores que 10 y menores que 1, por lo tanto, el rango 10..1 está vacío.

PD No recuerdo cuándo fue la última vez que escribí un ciclo for en ruby. Tal vez algo de http://www.ruby-doc.org/core-1.9.2/Enumerable.html te serviría mejor?

+1

Gran explicación. – Problematic

+0

Gracias. Mientras trabajo con Rails, nunca tuve que usar ni por un tiempo. Solo quería intentar escribir diferentes métodos de clasificación con Ruby, y pasé algún tiempo tratando de descubrir dónde me equivoqué. Resulta que no pude hacer al revés para el bucle de esa manera. –

11

intentar algo así como

10.downto(1) { |i| ... } 
Cuestiones relacionadas