Crash IRB (Ruby interactivo)

18

Ruby viene con un REPL incorporado, que es bastante útil.

captura de pantalla de IRB

¡Su desafío es bloquearlo en la menor cantidad de código!

La definición de "bloqueo" es "hacer que salga de manera involuntaria ". Este medio exit, quit, abort,irb_exit , irb_quit, et. Alabama. No son respuestas válidas.

Por otra parte, es posible que no causa ningún efecto secundario a cualquier otra parte del sistema. Por ejemplo,`rm -rf /` tampoco es válido.

Cualquier versión 1.9.3 o superior es válida. Si su código solo funciona en una versión específica de Ruby, puede especificarlo en la respuesta.

La restricción final es que no puedes confiar en ninguna gema.

Este es el , por lo que el código más corto que bloquea IRB ganará.

Pomo de la puerta
fuente
Puedo hacer golfscript anser, por favor?
Trauma digital
3
Guau. No sé Ruby, y después de leer estas respuestas, nunca lo aprenderé.
izabera
"La definición de 'bloqueo' es 'hacer que salga de manera no intencionada'". ¿Cómo se supone que debemos escribir código para hacer algo no intencionado? Voto para cerrar porque no está claro lo que estás preguntando.
msh210

Respuestas:

6

5 personajes

ENV=0

(inspirado por la respuesta de @daniero )

Howard
fuente
no funciona para mí:irb(main):001:0> ENV=0 (irb):1: warning: already initialized constant ENV
Brian Minton
@BrianMinton Tenía solo un 1.9.3p194 a mano y "funciona" con esa versión.
Howard
ah, mi versión es bastante antigua:irb 0.9.6(09/06/30)
Brian Minton
1
@BrianMinton que es la última versión de irb
DarkHeart
17

16 caracteres

String=0
String=0

No es el más corto, pero creo que es divertido que no se bloquee hasta la segunda línea. Genera aproximadamente 20 líneas de texto antes de que salga IRB. Por alguna razón, no se puede acortar por ejemplo 2.times{String=0}.


editar

De todas las respuestas hasta ahora, esta es la única que me ha funcionado (y funciona en todas las versiones que pude tener en mis manos), y las he probado todas en estas versiones:

En cualquier tipo de Linux que obtengo al sshingresar a mi universidad:
ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-linux]
ruby 1.8.5 (2006-08-25) [x86_64-linux]
Mac OS X Mavericks predeterminado:
ruby 2.0.0p247 (2013-06-27 revision 41674) [universal.x86_64-darwin13]
Instalado a través de Homebrew en OS X:
ruby 1.9.3p448 (2013-06-27 revision 41675) [x86_64-darwin12.4.0]

editar 2

7 personajes

Combinando mi primera versión (y / o la respuesta de @ Howard , para una referencia cruzada máxima) con la respuesta de @ chino perl goth :

STDIN=0
daniero
fuente
Array=0se bloquea de inmediato.
primo
1
@primo genial, pero no puedo hacer que funcione: / (Ver mi edición)
daniero
Lo mismo aquí, solo esto y la respuesta de cierre estándar funcionan, todos los demás solo dan advertencias.
usuario12205
Sí, el estándar también funciona para mí. Fue publicado después de mi edición.
daniero
1
Puede acortar la segunda línea =y aún se bloquea.
Fraxtil
10

12 caracteres

Ruby no es exactamente mi taza de té, pero acabo de descubrir que irb actúa de forma extraña cuando cierro el stdin :)

$stdin.close

probado en irb 0.9.6 (06/09/30) y ruby ​​1.9.3p194

perl chino goth
fuente
55
STDIN.closetambién funciona, ¡y es 1 char menos!
Kavu
+1 porque es tan obvio cuando lo miras que causará problemas :) Mi respuesta probablemente sea más un error, pero para este realmente no puedes esperar que IRB haga algo inteligente; Es como en Star Trek o lo que sea cuando le hacen una pregunta imposible a un robot súper inteligente y explota.
daniero
Relacionado: $>.close.
Jordania
7

10 9 caracteres

Una variante más corta en la respuesta de @ daniero:

String=1
-

Esto funciona al menos en el OS X Mavericks Ruby predeterminado (2.0.0).

La respuesta básicamente se basa en el hecho de que la Tokenfunción Ruby hace un caseen el token de entrada. Uno de los casos contrasta String, que ha sido redefinido por la primera línea. Este caso falla, por lo que el caso cae al valor predeterminado, lo que supone que el objeto tiene unancestors descriptor de acceso (que no tiene).

Debido a que el "error" está en el tokenizer, la primera línea no fallará porque la línea solo surte efecto una vez finalizado el análisis. Por lo tanto, solo afecta a las líneas posteriores. Las líneas subsiguientes deben contener algún tipo de operador para ver la falla.

nneonneo
fuente
+1 Para la explicación. ¿Pero quién es este daneiro? ;)
daniero
@daniero: Mis disculpas, hoy parezco liséxico.
nneonneo
6

5 personajes

$>=$<

Establece stdout en stdin que arroja un error al intentar abrir stdin para escribir y bloquea irb.

fotoionizado
fuente
Tenga en cuenta que esto se prueba en ruby ​​2.3.0p0
fotoionizada el
5

22 caracteres

def method_missing;end

Aparentemente se mete con algunas partes internas del IRB. (Para solucionarlo, agregue self.después def).

Pomo de la puerta
fuente
4

12 caracteres

def send;end

Hasta donde yo sé, hay cuatro métodos en la clase Object que muestran este tipo de comportamiento:

send
method_missing
respond_to?
respond_to_missing?
David Herrmann
fuente
44
En mi IRB simplemente regresa nily continúa
daniero
@daniero 1.8.6 y 1.9.3 se bloquean.
primo
@primo ya no se bloquea en 2.0.0
drusepth
4

5 personajes

IRB=0

Nada perturba a IRB como redefinir IRB.

vgoff
fuente
¡Si! ¡Esto no se bloquea, pero imprime 20 líneas de errores después de cualquier cosa!
Mega Man
Probablemente una versión diferente de IRB ahora, @MegaMan, así que por ahora, definitivamente YMMV.
vgoff
Ambos son geniales, de todos modos!
Mega Man
2

12 10 caracteres

exec"exec"

No sé si esto cuenta, debido a la exec

Grano de cacao
fuente
1
Puedes deshacerte del espacio después del primeroexec
Fondo de la demanda de Mónica
0

26 + 1 = 27 caracteres

Esto no es muy deportivo, pero me divirtió descubrirlo por accidente y pensé que otros podrían disfrutarlo.

class Fixnum;def +;end end

Agregué +1 a la puntuación porque debes presionar Enter por segunda vez después de ingresar lo anterior (pero no +2 porque nadie más contó Enter).

Jordán
fuente