Ruby viene con un REPL incorporado, que es bastante útil.
¡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 código de golf , por lo que el código más corto que bloquea IRB ganará.
Respuestas:
5 personajes
(inspirado por la respuesta de @daniero )
fuente
irb(main):001:0> ENV=0 (irb):1: warning: already initialized constant ENV
irb 0.9.6(09/06/30)
16 caracteres
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 alssh
ingresar a mi universidad: Mac OS X Mavericks predeterminado: Instalado a través de Homebrew en OS X: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 :
fuente
Array=0
se bloquea de inmediato.=
y aún se bloquea.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 :)
probado en irb 0.9.6 (06/09/30) y ruby 1.9.3p194
fuente
STDIN.close
también funciona, ¡y es 1 char menos!$>.close
.109 caracteresUna variante más corta en la respuesta de @ daniero:
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
Token
función Ruby hace uncase
en el token de entrada. Uno de los casos contrastaString
, 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.
fuente
5 personajes
Establece stdout en stdin que arroja un error al intentar abrir stdin para escribir y bloquea irb.
fuente
22 caracteres
Aparentemente se mete con algunas partes internas del IRB. (Para solucionarlo, agregue
self.
despuésdef
).fuente
12 caracteres
Hasta donde yo sé, hay cuatro métodos en la clase Object que muestran este tipo de comportamiento:
fuente
nil
y continúa5 personajes
Nada perturba a IRB como redefinir IRB.
fuente
1210 caracteresNo sé si esto cuenta, debido a la
exec
fuente
exec
8 caracteres
Similar a la respuesta de perl goth chino :
$>
es un alias para STDOUT.fuente
26 + 1 = 27 caracteres
Esto no es muy deportivo, pero me divirtió descubrirlo por accidente y pensé que otros podrían disfrutarlo.
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).
fuente