Crash IRB (Ruby interaktif)


18

Ruby hadir dengan REPL bawaan, yang cukup praktis.

tangkapan layar IRB

Tantangan Anda adalah membuatnya crash dalam jumlah kode paling sedikit!

Definisi "crash" adalah "membuatnya keluar dengan cara yang tidak disengaja ." Ini berarti exit, quit, abort, irb_exit, irb_quit, et. Al. bukan jawaban yang valid.

Selain itu, Anda tidak boleh menyebabkan efek samping apa pun pada bagian lain dari sistem. Misalnya, `rm -rf /`tidak valid juga.

Versi 1.9.3 atau lebih tinggi adalah valid. Jika kode Anda hanya berfungsi pada versi Ruby tertentu, Anda dapat menentukannya dalam jawaban.

Batasan terakhir adalah Anda tidak boleh bergantung pada permata apa pun.

Ini adalah , jadi kode terpendek yang menabrak IRB akan menang!


Saya bisa menambahkan skrip golf, plz?
Digital Trauma

3
Wow. saya tidak tahu ruby, dan setelah membaca jawaban ini saya tidak akan pernah mempelajarinya.
izabera

"Definisi 'crash' adalah 'membuatnya keluar dengan cara yang tidak disengaja.'" Bagaimana kita seharusnya menulis kode yang dimaksudkan untuk melakukan sesuatu yang tidak disengaja? Saya memilih untuk menutup karena tidak jelas apa yang Anda minta.
msh210

Jawaban:


6

5 karakter

ENV=0

(terinspirasi oleh jawaban @daniero )


tidak bekerja untuk saya:irb(main):001:0> ENV=0 (irb):1: warning: already initialized constant ENV
Brian Minton

@BrianMinton Hanya memiliki 1.9.3p194 di tangan dan "berfungsi" dengan versi itu.
Howard

ah, versi saya sudah cukup tua:irb 0.9.6(09/06/30)
Brian Minton

1
@BrianMinton itu adalah versi terbaru dari irb
DarkHeart

17

16 karakter

String=0
String=0

Bukan yang terpendek, tapi saya pikir itu lucu bahwa itu tidak crash sampai baris kedua. Menghasilkan sekitar 20 baris teks sebelum IRB keluar. Untuk beberapa alasan itu tidak dapat disingkat menjadi misalnya 2.times{String=0}.


sunting

Dari semua jawaban sejauh ini, ini adalah satu-satunya yang bekerja untuk saya (dan itu bekerja di semua versi yang bisa saya dapatkan), dan saya sudah menguji semuanya dalam versi ini:

Di Linux apa pun yang saya dapatkan ketika sshmasuk ke universitas saya:
ruby 1.9.2p180 (2011-02-18 revision 30909) [x86_64-linux]
ruby 1.8.5 (2006-08-25) [x86_64-linux]
Default Mac OS X Mavericks:
ruby 2.0.0p247 (2013-06-27 revision 41674) [universal.x86_64-darwin13]
Diinstal melalui Homebrew pada OS X:
ruby 1.9.3p448 (2013-06-27 revision 41675) [x86_64-darwin12.4.0]

edit 2

7 karakter

Menggabungkan versi pertama saya (dan / atau jawaban @ Howard , untuk referensi silang maksimum) dengan jawaban @ chinese perl goth :

STDIN=0

Array=0crash segera.
primo

1
@rimo keren, tapi saya tidak bisa membuatnya bekerja: / (Lihat edit saya)
daniero

Sama di sini, hanya ini dan jawaban stdin penutup bekerja, semua yang lain hanya memberikan peringatan.
user12205

Ya, yang stdin bekerja untuk saya juga. Itu diposting setelah edit saya.
daniero

1
Anda dapat mempersingkat baris kedua ke =dan itu masih macet.
Fraxtil

10

12 karakter

ruby bukan cangkir teh saya, tapi saya baru tahu bahwa irb bertindak lucu ketika saya menutup stdin :)

$stdin.close

diuji pada irb 0.9.6 (09/06/30) dan ruby ​​1.9.3p194


5
STDIN.closebekerja juga, dan itu 1 kurang char!
Kavu

+1 karena sangat jelas ketika Anda melihatnya akan menimbulkan masalah :) Jawaban saya mungkin lebih merupakan bug, tetapi untuk yang ini Anda tidak dapat benar-benar mengharapkan IRB untuk melakukan sesuatu yang pintar; itu seperti di Star Trek atau apa pun ketika mereka mengajukan robot yang sangat cerdas pertanyaan yang mustahil dan meledak.
daniero

Terkait: $>.close.
Jordan

7

10 9 karakter

Varian yang lebih pendek pada jawaban @ daniero:

String=1
-

Ini berfungsi setidaknya di OS default Mavericks Ruby (2.0.0).

Jawabannya pada dasarnya bergantung pada fakta bahwa Tokenfungsi Ruby melakukan casepada token input. Salah satu kasus memeriksa String, yang telah didefinisikan ulang oleh baris pertama. Kasing ini gagal, maka kasing jatuh ke default, yang mengasumsikan objek memiliki ancestorsaccessor (yang tidak).

Karena "bug" ada di tokenizer, baris pertama tidak akan gagal karena garis hanya berlaku setelah penguraian selesai. Dengan demikian, itu hanya mempengaruhi baris berikutnya. Saluran berikutnya harus berisi beberapa jenis operator untuk melihat kegagalannya.


+1 Untuk penjelasannya. Tapi siapa daneiro ini? ;)
daniero

@daniero: Permintaan maaf saya, saya tampak lysdexic hari ini.
nneonneo

6

5 karakter

$>=$<

Set stdout ke stdin yang melempar kesalahan saat mencoba membuka stdin untuk menulis dan crash irb.


Perhatikan bahwa ini diuji pada 2.3.0p0 ruby
photoionized

5

22 karakter

def method_missing;end

Rupanya itu kacau dengan beberapa irb internal. (Untuk memperbaikinya, tambahkan self.setelah def.)


4

12 karakter

def send;end

Sejauh yang saya tahu, ada empat metode di kelas Object yang menunjukkan perilaku semacam ini:

send
method_missing
respond_to?
respond_to_missing?

4
Di IRB saya hanya mengembalikan nildan menjalankan
daniero

@daniero 1.8.6 dan 1.9.3 keduanya macet.
primo

@primo tidak lagi mogok pada 2.0.0
drusepth

4

5 Karakter

IRB=0

Tidak ada yang mengganggu IRB seperti mendefinisikan ulang IRB.


Ya! Ini tidak crash, tetapi mencetak 20 baris kesalahan setelah apa pun!
Mega Man

Mungkin versi IRB yang berbeda sekarang, @MegaMan jadi sekarang, pasti YMMV.
vgoff

Keduanya keren, pokoknya!
Mega Man



0

26 + 1 = 27 karakter

Ini tidak terlalu golf, tetapi saya senang menemukannya secara tidak sengaja dan berpikir orang lain akan menikmatinya.

class Fixnum;def +;end end

Saya menambahkan +1 ke skor karena Anda harus menekan Enter untuk kedua kalinya setelah memasukkan di atas (tetapi tidak +2 karena tidak ada orang lain yang menghitung Enter).

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.