[Rubies] Hay forma de romper un case y un for en ruby?

14 views
Skip to first unread message

Manuel Pernalete

unread,
May 3, 2008, 12:42:30 PM5/3/08
to Lista de Ruby
Buenos dias amigos de la lista!

Ustedes saben que en javascript con la instruccion break; puedo forzar un bucle for y un switch(x)

ahora bien en ruby se puede hacer eso? reventar un buble for y un case ?????

muchas gracias

--
Atentamente,
Ing. Manuel Pernalete
Soluciones Informáticas MWP, C.A.
0412-510.94.09 / 0414-352.68.72 / 0416-359.34.18

javier ramirez

unread,
May 3, 2008, 12:51:10 PM5/3/08
to Manuel Pernalete, Lista de Ruby
hola,

> Ustedes saben que en javascript con la instruccion break; puedo forzar
> un bucle for y un switch(x)
>
> ahora bien en ruby se puede hacer eso? reventar un buble for y un case
> ?????

prueba con break ;)

una vez veas que funciona, te recomendaría hacerte con una referencia
del lenguaje. Si no quieres comprarte un libro, en internet tienes
gratis una edición vieja del "Programming Ruby" de Dave Thomas. Es una
edición vieja, pero aún así bastante útil. Tienes también la opción de
comprar ese mismo libro (o algún otro) en versión más moderna.

saludos,

javier ramírez

_______________________________________________
Rubies mailing list
Rub...@listas.escomposlinux.org
https://listas.escomposlinux.org/mailman/listinfo/rubies

Iñaki Baz Castillo

unread,
May 3, 2008, 1:02:59 PM5/3/08
to rub...@listas.escomposlinux.org
El Sábado, 3 de Mayo de 2008, Manuel Pernalete escribió:
> Buenos dias amigos de la lista!
>
> Ustedes saben que en javascript con la instruccion break; puedo forzar un
> bucle for y un switch(x)
>
> ahora bien en ruby se puede hacer eso? reventar un buble for y un case
> ?????
>
> muchas gracias

No, no se puede, yo hice la misma pregunta hace tiempo :)

El truco es pensar de otra forma, en Ruby se puede hacer de todo y mucho más
fácil que en otros lenguajes. El problema es cuando venimos de otro lenguaje
y asumimos que las cosas se deben hacer de la misma manera. ;)

--
Iñaki Baz Castillo

Iñaki Baz Castillo

unread,
May 3, 2008, 1:05:29 PM5/3/08
to rub...@listas.escomposlinux.org
El Sábado, 3 de Mayo de 2008, javier ramirez escribió:
> hola,
>
> > Ustedes saben que en javascript con la instruccion break; puedo forzar
> > un bucle for y un switch(x)
> >
> > ahora bien en ruby se puede hacer eso? reventar un buble for y un case
> > ?????
>
> prueba con break ;)

No, "break" en Ruby es sólo para iteraciones.
;)


--
Iñaki Baz Castillo

Gerardo Santana Gómez Garrido

unread,
May 3, 2008, 1:10:38 PM5/3/08
to Iñaki Baz Castillo, rub...@listas.escomposlinux.org
On Sat, May 3, 2008 at 12:05 PM, Iñaki Baz Castillo <i...@aliax.net> wrote:
> El Sábado, 3 de Mayo de 2008, javier ramirez escribió:
>
> > hola,
> >
> > > Ustedes saben que en javascript con la instruccion break; puedo forzar
> > > un bucle for y un switch(x)
> > >
> > > ahora bien en ruby se puede hacer eso? reventar un buble for y un case
> > > ?????
> >
> > prueba con break ;)
>
> No, "break" en Ruby es sólo para iteraciones.
> ;)


break permite salir de un bloque (block), mismo que es frecuentemente
utilizado para iteraciones.

En un case en cambio no hace falta un break, porque un when termina
donde empieza el otro, a diferencia de C.
--
Gerardo Santana

Iñaki Baz Castillo

unread,
May 3, 2008, 1:12:41 PM5/3/08
to rub...@listas.escomposlinux.org
El Sábado, 3 de Mayo de 2008, Gerardo Santana Gómez Garrido escribió:

> En un case en cambio no hace falta un break, porque un when termina
> donde empieza el otro, a diferencia de C.

Que por otra parte es lo normal. El comportamiento en C es en mi opinión
bastante rarito.


--
Iñaki Baz Castillo

Gerardo Santana Gómez Garrido

unread,
May 3, 2008, 1:39:38 PM5/3/08
to Iñaki Baz Castillo, rub...@listas.escomposlinux.org
On Sat, May 3, 2008 at 12:12 PM, Iñaki Baz Castillo <i...@aliax.net> wrote:
> El Sábado, 3 de Mayo de 2008, Gerardo Santana Gómez Garrido escribió:
>
>
> > En un case en cambio no hace falta un break, porque un when termina
> > donde empieza el otro, a diferencia de C.
>
> Que por otra parte es lo normal. El comportamiento en C es en mi opinión
> bastante rarito.

Jeje. Cada quién su opinión. Mi segundo lenguaje fue C (el primero fue
GW-BASIC) y a mí me parece de lo más normal.

Pero dicho sea de paso, el comportamiento de C te permite hacer
algunas cosas interesantes, como el dispositivo de Duff
(http://en.wikipedia.org/wiki/Duff%27s_device).

También me fue muy útil para ahorrarme algo de código aquí:

http://github.com/santana/ruby-informix/tree/master/ext/informixc.ec

donde en la línea 1572 tengo la etiqueta default, y en la 1651 tengo
la etiqueta T_STRING (sí, default no tiene que estar al final).

La opción default "cae" (falls through) hacia la opción T_STRING, pues
en ambos casos el tratamiento final es el mismo. De lo contrario,
hubiera tenido que duplicar código (o definir una función, pero
hubiera sido demasiado).

--
Gerardo Santana

Iñaki Baz Castillo

unread,
May 3, 2008, 1:59:52 PM5/3/08
to rub...@listas.escomposlinux.org
El Sábado, 3 de Mayo de 2008, escribió:
> Gracias amigo Castillo. Le he dado duro al google y no conseguí respuesta,
> incluso cuando uso el break me da error Rails.

Es que no se puede meter un "break" en un "case", sin más. Ni en Rails ni en
ninguna otra cosa que al final use Ruby.

Antonio Pardo

unread,
May 3, 2008, 3:38:35 PM5/3/08
to rub...@listas.escomposlinux.org
Buenas,

El Saturday 03 May 2008 19:10:38 Gerardo Santana Gómez Garrido escribió:
> break permite salir de un bloque (block), mismo que es frecuentemente
> utilizado para iteraciones.

por poner el otro ejemplo comunmente usado en iteraciones, 'next' salta a la
siguiente dentro del bloque.

Saludos

javier ramirez

unread,
May 4, 2008, 5:48:39 AM5/4/08
to Iñaki Baz Castillo, rub...@listas.escomposlinux.org

>>> Ustedes saben que en javascript con la instruccion break; puedo forzar
>>> un bucle for y un switch(x)
>>> prueba con break ;)
>>>
>
> No, "break" en Ruby es sólo para iteraciones.
>

efectivamente, break es para iteraciones.. como en la pregunta decía que
quería forzar salir de un for y un switch pensé que hablábamos de algo
parecido a
[1,2,3].each do |x|
case x
when 1
puts "OK"
break
end
end

Eso rompe el bucle en cuanto se encuentra el break

saludos,

javier ramírez

Reply all
Reply to author
Forward
0 new messages