Crash IRB (Ruby interactif)


18

Ruby est livré avec un REPL intégré, ce qui est assez pratique.

capture d'écran de l'IRB

Votre défi est de le planter dans le moins de code!

La définition de «crash» est «faites-le sortir de manière non intentionnelle ». Ce moyen exit, quit, abort, irb_exit, irb_quit, et. Al. ne sont pas des réponses valides.

De plus, vous ne pouvez provoquer aucun effet secondaire sur aucune autre partie du système. Par exemple, `rm -rf /`n'est pas valide non plus.

Toute version 1.9.3 ou supérieure est valide. Si votre code ne fonctionne que sur une version spécifique de Ruby, vous pouvez le spécifier dans la réponse.

La dernière restriction est que vous ne pouvez pas compter sur des gemmes.

C'est le , donc le code le plus court qui plante IRB gagnera!


Je peux Haz Golfscript Anser, PLZ?
Digital Trauma

3
sensationnel. je ne connais pas le rubis, et après avoir lu ces réponses je ne l'apprendrai jamais.
izabera

«La définition de« crash »est« faites-le sortir de manière inattendue. »« Comment sommes-nous censés écrire du code destiné à faire quelque chose d'inattendu? Je vote pour fermer car pas clair ce que vous demandez.
msh210

Réponses:


6

5 caractères

ENV=0

(inspiré par la réponse de @daniero )


ne fonctionne pas pour moi:irb(main):001:0> ENV=0 (irb):1: warning: already initialized constant ENV
Brian Minton

@BrianMinton n'avait qu'un 1.9.3p194 à portée de main et cela "fonctionne" avec cette version.
Howard

ah, ma version est assez ancienne:irb 0.9.6(09/06/30)
Brian Minton

1
@BrianMinton qui est la dernière version d'irb
DarkHeart

17

16 caractères

String=0
String=0

Pas le plus court, mais je pense que c'est drôle qu'il ne plante pas avant la deuxième ligne. Génère environ 20 lignes de texte avant la fermeture de l'IRB. Pour une raison quelconque, il ne peut pas être raccourci par exemple 2.times{String=0}.


Éditer

De toutes les réponses jusqu'à présent, c'est la seule qui a fonctionné pour moi (et cela fonctionne dans toutes les versions sur lesquelles je pourrais mettre la main), et je les ai toutes testées dans ces versions:

Quel que soit le type de Linux que j'obtiens sshen entrant dans mon université:
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 par défaut:
ruby 2.0.0p247 (2013-06-27 revision 41674) [universal.x86_64-darwin13]
Installé via Homebrew sur OS X:
ruby 1.9.3p448 (2013-06-27 revision 41675) [x86_64-darwin12.4.0]

modifier 2

7 caractères

Combiner ma première version (et / ou la réponse de @ Howard pour une référence croisée maximale) avec la réponse de @ chinese perl goth :

STDIN=0

Array=0se bloque immédiatement.
primo

1
@primo cool, mais je n'arrive pas à le faire fonctionner: / (Voir ma modification)
daniero

Même chose ici, seulement ceci et la réponse de fermeture stdin fonctionnent, tous les autres ne donnent que des avertissements.
user12205

Oui, le stdin fonctionne aussi pour moi. Il a été publié après ma modification.
daniero

1
Vous pouvez raccourcir la deuxième ligne =et elle se bloque toujours.
Fraxtil

10

12 caractères

le rubis n'est pas exactement ma tasse de thé, mais je viens de découvrir que l'irb agit de façon drôle quand je ferme le stdin :)

$stdin.close

testé sur irb 0.9.6 (09/06/30) et rubis 1.9.3p194


5
STDIN.closefonctionne aussi, et c'est 1 char de moins!
Kavu

+1 parce que c'est tellement évident quand vous le regardez que cela causera des problèmes :) Ma réponse est probablement plus un bug, mais pour celui-ci, vous ne pouvez pas vraiment vous attendre à ce qu'IRB fasse quelque chose d'intelligent; c'est comme dans Star Trek ou quoi que ce soit quand ils posent une question impossible à un robot super intelligent et ça explose.
daniero

Connexes: $>.close.
Jordan

7

10 9 caractères

Une variante plus courte de la réponse de @ daniero:

String=1
-

Cela fonctionne au moins dans OS X Mavericks Ruby par défaut (2.0.0).

La réponse repose essentiellement sur le fait que la Tokenfonction Ruby fait un casesur le jeton d'entrée. Un des cas vérifie String, qui a été redéfini par la première ligne. Ce cas échoue, donc le cas tombe à la valeur par défaut, ce qui suppose que l'objet a unancestors accesseur (ce qu'il n'a pas).

Parce que le "bug" est dans le tokenizer, la première ligne n'échouera pas car la ligne ne prend effet qu'après l'analyse. Ainsi, cela n'affecte que les lignes suivantes. Les lignes suivantes doivent contenir une sorte d'opérateur afin de voir l'échec.


+1 Pour l'explication. Mais qui est ce daneiro? ;)
daniero

@daniero: Mes excuses, je semble être lysdexique aujourd'hui.
nneonneo

6

5 caractères

$>=$<

Définit stdout sur stdin, ce qui génère une erreur lors de l'ouverture de stdin pour l'écriture et bloque irb.


Notez que cela est testé sur ruby ​​2.3.0p0
photoionisé le

5

22 caractères

def method_missing;end

Apparemment, il dérange certains internes irb. (Pour le réparer, ajoutez self.après def.)


4

12 caractères

def send;end

Pour autant que je sache, il existe quatre méthodes dans la classe Object qui montrent ce type de comportement:

send
method_missing
respond_to?
respond_to_missing?

4
Dans mon IRB, il revient simplement nilet continue
daniero

@daniero 1.8.6 et 1.9.3 se bloquent tous les deux.
primo

@primo ne plante plus le 2.0.0
drusepth

4

5 personnages

IRB=0

Rien ne dérange l'IRB tout comme la redéfinition de l'IRB.


Ouais! Cela ne plante pas, mais affiche des erreurs de 20 lignes après tout!
Mega Man

Probablement une version différente d'IRB maintenant, @MegaMan donc maintenant, certainement YMMV.
vgoff

Les deux sont cool, de toute façon!
Mega Man



0

26 + 1 = 27 caractères

Ce n'est pas très golfique, mais j'ai été amusé de le découvrir par accident et j'ai pensé que d'autres pourraient l'apprécier.

class Fixnum;def +;end end

J'ai ajouté +1 au score parce que vous devez appuyer sur Entrée une deuxième fois après avoir entré ce qui précède (mais pas +2 car personne d'autre n'a compté Entrée).

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.