Crash IRB (interaktywny Ruby)

18

Ruby ma wbudowaną REPL, co jest dość przydatne.

zrzut ekranu IRB

Twoim wyzwaniem jest rozbicie go na jak najmniejszej ilości kodu!

Definicja „awarii” brzmi: „niech niezamierzone wyjście”. To oznacza exit, quit, abort, irb_exit, irb_quit, i. glin. nie są poprawnymi odpowiedziami.

Ponadto, może nie powodować żadnych efekt uboczny do jakiejkolwiek innej części systemu. Na przykład też `rm -rf /`nie jest poprawny.

Każda wersja 1.9.3 lub nowsza jest poprawna. Jeśli twój kod działa tylko na określonej wersji Ruby, możesz to określić w odpowiedzi.

Ostatnim ograniczeniem jest to, że nie możesz polegać na żadnych klejnotach.

To jest , więc wygra najkrótszy kod, który zawiesza IRB!

Klamka
źródło
Mogę Haz Anser Golfscript, PLZ?
Cyfrowa trauma
3
łał. nie znam rubinu, a po przeczytaniu tych odpowiedzi nigdy się go nie nauczę.
izabera
„Definicja„ awarii ”polega na tym, że wyjście kończy się w niezamierzony sposób.” „Jak mamy napisać kod przeznaczony do zrobienia czegoś niezamierzonego? Głosuję za zamknięciem, ponieważ niejasne jest to, o co prosisz.
msh210,

Odpowiedzi:

6

5 znaków

ENV=0

(zainspirowany odpowiedzią @daniero )

Howard
źródło
nie działa dla mnie:irb(main):001:0> ENV=0 (irb):1: warning: already initialized constant ENV
Brian Minton
@BrianMinton Miał pod ręką tylko wersję 1.9.3p194 i „działa” z tą wersją.
Howard
ah, moja wersja jest dość stara:irb 0.9.6(09/06/30)
Brian Minton
1
@BrianMinton to najnowsza wersja irb
DarkHeart
17

16 znaków

String=0
String=0

Nie najkrótszy, ale myślę, że to zabawne, że nie upada do drugiej linii. Generuje około 20 linii tekstu przed wyjściem IRB. Z jakiegoś powodu nie można go na przykład skrócić 2.times{String=0}.


edytować

Ze wszystkich dotychczasowych odpowiedzi jest to jedyna, która dla mnie zadziałała (i działa we wszystkich wersjach, które mogłem zdobyć) i przetestowałem je wszystkie w tych wersjach:

Na jakimkolwiek systemie Linux dostaję sshsię na mój uniwersytet:
ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-linux]
ruby 1.8.5 (2006-08-25) [x86_64-linux]
Domyślnie Mac OS X Mavericks:
ruby 2.0.0p247 (2013-06-27 revision 41674) [universal.x86_64-darwin13]
Zainstalowane przez Homebrew na OS X:
ruby 1.9.3p448 (2013-06-27 revision 41675) [x86_64-darwin12.4.0]

edycja 2

7 znaków

Łącząc moją pierwszą wersję (i / lub odpowiedź @ Howarda , dla maksymalnego odniesienia) z odpowiedzią @ chińskiego perla gotha :

STDIN=0
daniero
źródło
Array=0natychmiast ulega awarii.
primo
1
@primo cool, ale nie mogę go uruchomić: / (Zobacz moją edycję)
daniero
To samo tutaj, tylko to i zamykające standardowe odpowiedzi działają, wszystkie pozostałe dają tylko ostrzeżenia.
user12205
Tak, standardowe wyjście też dla mnie działa. Został opublikowany po mojej edycji.
daniero
1
Możesz skrócić drugą linię =i nadal się zawiesza.
Fraxtil
10

12 znaków

ruby nie jest dokładnie moją filiżanką herbaty, ale właśnie dowiedziałem się, że irb zachowuje się zabawnie, kiedy zamykam standardowe wejście :)

$stdin.close

testowany na IRB 0.9 (09/06/30) i ruby ​​1.9.3p194

goth chiński perl
źródło
5
STDIN.closeteż działa i jest o 1 mniej char!
Kavu
+1, ponieważ jest to tak oczywiste, kiedy na to spojrzysz, że spowoduje kłopoty :) Moja odpowiedź jest prawdopodobnie bardziej błędem, ale w tym przypadku nie można oczekiwać, że IRB zrobi coś sprytnego; tak jak w Star Trek czy cokolwiek innego, kiedy zadają super inteligentnemu robotowi niemożliwe pytanie i wybucha.
daniero
Powiązane: $>.close.
Jordan
7

10 9 znaków

Krótszy wariant odpowiedzi @ daniero:

String=1
-

Działa to przynajmniej w domyślnym systemie OS X Mavericks Ruby (2.0.0).

Odpowiedź zasadniczo polega na tym, że Tokenfunkcja Ruby wykonuje casetoken wejściowy. Jeden z przypadków sprawdza String, który został na nowo zdefiniowany w pierwszym wierszu. Ten przypadek kończy się niepowodzeniem, więc przypadek przechodzi do wartości domyślnej, która zakłada, że ​​obiekt ma ancestorsakcesor (a nie ma).

Ponieważ „błąd” występuje w tokenizerze, pierwsza linia nie zawiedzie, ponieważ linia zaczyna działać dopiero po zakończeniu analizy. Tak więc wpływa tylko na kolejne wiersze. Kolejne wiersze muszą zawierać operator, aby zobaczyć awarię.

nneonneo
źródło
+1 za wyjaśnienie. Ale kim jest ten Daneiro? ;)
daniero
@daniero: Przepraszam, dzisiaj wydaje mi się, że jestem lysdeksistyczny.
nneonneo
6

5 znaków

$>=$<

Ustawia stdout na stdin, który zgłasza błąd podczas próby otwarcia stdin do zapisu i powoduje awarię IRB.

fotoionizowany
źródło
Zauważ, że jest to testowane na Ruby 2.3.0p0
fotoionizowanym 29.04.16
5

22 znaki

def method_missing;end

Najwyraźniej zadziera z niektórymi elementami wewnętrznymi IRB. (Aby to naprawić, dodaj self.po def.)

Klamka
źródło
4

12 znaków

def send;end

O ile mi wiadomo, w klasie Object istnieją cztery metody, które pokazują tego rodzaju zachowanie:

send
method_missing
respond_to?
respond_to_missing?
David Herrmann
źródło
4
W moim IRB po prostu wraca nili kontynuuje
daniero
Awarie @daniero 1.8.6 i 1.9.3.
primo
@primo nie ulega już awarii w wersji 2.0.0
drusepth
4

5 znaków

IRB=0

Nic nie przeszkadza IRB tak jak redefiniowanie IRB.

vgoff
źródło
Tak! To się nie zawiesza, ale drukuje po 20 błędów linii!
Mega Man
Prawdopodobnie inna wersja IRB, @MegaMan, więc zdecydowanie zdecydowanie YMMV.
vgoff
Obie są w każdym razie fajne!
Mega Man
2

12 10 znaków

exec"exec"

Nie wiem, czy to się liczy, z powodu exec

Ziarno kakaowca
źródło
1
Możesz pozbyć się tego miejsca po raz pierwszyexec
pozew Fund Moniki
2

8 znaków

Podobne do odpowiedzi chińskiego perla gota :

$>.close

$> to alias dla STDOUT.

Jordania
źródło
0

26 + 1 = 27 znaków

To nie jest bardzo golfowe, ale rozbawiło mnie to przez przypadek i pomyślałem, że inni mogą się cieszyć

class Fixnum;def +;end end

Dodałem +1 do wyniku, ponieważ po naciśnięciu powyższego musisz nacisnąć klawisz Enter (ale nie +2, ponieważ nikt inny nie liczył Enter).

Jordania
źródło