O Ruby vem com um REPL embutido, o que é bastante útil.
Seu desafio é travá-lo com a menor quantidade de código!
A definição de "acidente" é "fazê-lo sair de forma não intencional ". Este meio exit
, quit
, abort
, irb_exit
, irb_quit
, et. al. não são respostas válidas.
Além disso, você não pode causar efeitos colaterais a nenhuma outra parte do sistema. Por exemplo, `rm -rf /`
também não é válido.
Qualquer versão 1.9.3 ou superior é válida. Se seu código funcionar apenas em uma versão específica do Ruby, você poderá especificar isso na resposta.
A restrição final é que você não pode confiar em nenhuma gema.
Isso é código-golfe , então o código mais curto que trava o IRB vence!
Respostas:
5 caracteres
(inspirado na resposta de @daniero )
fonte
irb(main):001:0> ENV=0 (irb):1: warning: already initialized constant ENV
irb 0.9.6(09/06/30)
16 caracteres
Não é o mais curto, mas acho engraçado que ele não trava até a segunda linha. Gera aproximadamente 20 linhas de texto antes da saída do IRB. Por alguma razão, não pode ser reduzido para, por exemplo
2.times{String=0}
.editar
De todas as respostas até agora, essa é a única que funcionou para mim (e funciona em todas as versões em que pude colocar minhas mãos), e testei todas elas nessas versões:
Em qualquer tipo de Linux que eu recebo ao entrarssh
na minha universidade: Padrão do Mac OS X Mavericks: Instalado através do Homebrew no OS X:editar 2
7 caracteres
Combinando minha primeira versão (e / ou a resposta de @ Howard , para referência cruzada máxima) com a resposta de @ chinese perl goth :
fonte
Array=0
trava imediatamente.=
e ela ainda trava.12 caracteres
ruby não é exatamente minha xícara de chá, mas eu acabei de descobrir que o irb age engraçado quando fecho o stdin :)
testado em irb 0.9.6 (30/06/30) e ruby 1.9.3p194
fonte
STDIN.close
funciona também, e é 1 char a menos!$>.close
.109 caracteresUma variante mais curta da resposta de @ daniero:
Isso funciona pelo menos no OS X Mavericks Ruby padrão (2.0.0).
A resposta depende basicamente do fato de que a
Token
função Ruby faz umcase
no token de entrada. Um dos casos é verificadoString
, redefinido pela primeira linha. Como esse caso falha, o caso cai para o padrão, que assume que o objeto possui umancestors
acessador (o que não possui).Como o "bug" está no tokenizer, a primeira linha não falhará porque a linha só entrará em vigor após a conclusão da análise. Assim, afeta apenas as linhas subseqüentes. As linhas subseqüentes devem conter algum tipo de operador para ver a falha.
fonte
5 caracteres
Define stdout como stdin, o que gera um erro ao tentar abrir o stdin para gravação e trava o irb.
fonte
22 caracteres
Aparentemente, ele mexe com alguns componentes internos do IRB. (Para corrigi-lo, adicione
self.
depoisdef
.)fonte
12 caracteres
Até onde eu sei, existem quatro métodos na classe Object que mostram esse tipo de comportamento:
fonte
nil
e continua #5 caracteres
Nada perturba o IRB como redefinir o IRB.
fonte
1210 caracteresNão sei se isso conta, por causa da
exec
fonte
exec
8 caracteres
Semelhante à resposta do chinês perl goth :
$>
é um alias para STDOUT.fonte
26 + 1 = 27 caracteres
Isso não é muito bom, mas achei divertido descobri-lo por acidente e achei que outros pudessem gostar.
Eu adicionei +1 à pontuação porque você deve pressionar Enter uma segunda vez após inserir as opções acima (mas não +2 porque ninguém mais contou com Enter).
fonte