Sự cố IRB (Ruby tương tác)


18

Ruby đi kèm với REPL tích hợp, khá tiện dụng.

ảnh chụp màn hình của IRB

Thách thức của bạn là đánh sập nó với số lượng mã ít nhất!

Định nghĩa của "sự cố" là "làm cho nó thoát ra một cách ngoài ý muốn ." Điều này có nghĩa exit, quit, abort, irb_exit, irb_quit, et. al. không phải là câu trả lời hợp lệ.

Hơn nữa, bạn không thể gây ra bất kỳ tác dụng phụ nào cho bất kỳ phần nào khác của hệ thống. Ví dụ, `rm -rf /`cũng không hợp lệ.

Mọi phiên bản 1.9.3 trở lên đều hợp lệ. Nếu mã của bạn chỉ hoạt động trên một phiên bản cụ thể của Ruby, bạn có thể chỉ định điều đó trong câu trả lời.

Hạn chế cuối cùng là bạn không được dựa vào bất kỳ loại đá quý nào.

Đây là , vì vậy đoạn mã ngắn nhất gặp sự cố IRB sẽ giành chiến thắng!


Tôi có thể haz golfs anser, plz?
Chấn thương kỹ thuật số

3
ồ Tôi không biết ruby, và sau khi đọc những câu trả lời này, tôi sẽ không bao giờ học được nó.
izabera

"Định nghĩa của 'sự cố' là 'làm cho nó thoát ra theo cách không có chủ ý.'" Chúng ta phải viết mã như thế nào để làm điều gì đó ngoài ý muốn? Tôi bỏ phiếu để đóng như không rõ những gì bạn đang hỏi.
msh210

Câu trả lời:


6

5 ký tự

ENV=0

(lấy cảm hứng từ câu trả lời của @daniero )


không làm việc cho tôi:irb(main):001:0> ENV=0 (irb):1: warning: already initialized constant ENV
Brian Minton

@BrianMinton Chỉ có 1.9.3p194 trong tay và nó "hoạt động" với phiên bản đó.
Howard

à, phiên bản của tôi khá cũ:irb 0.9.6(09/06/30)
Brian Minton

1
@BrianMinton đó là phiên bản mới nhất của
irb

17

16 ký tự

String=0
String=0

Không phải là ngắn nhất, nhưng tôi nghĩ thật buồn cười khi nó không sụp đổ cho đến dòng thứ hai. Tạo khoảng 20 dòng văn bản trước khi IRB thoát. Đối với một số lý do, nó không thể được rút ngắn để ví dụ 2.times{String=0}.


biên tập

Trong tất cả các câu trả lời cho đến nay, đây là câu trả lời duy nhất phù hợp với tôi (và nó hoạt động trong tất cả các phiên bản tôi có thể sử dụng được) và tôi đã thử nghiệm tất cả chúng trong các phiên bản này:

Trên bất kỳ loại Linux nào tôi có được khi sshvào trường đại học của mình:
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 mặc định:
ruby 2.0.0p247 (2013-06-27 revision 41674) [universal.x86_64-darwin13]
Được cài đặt thông qua Homebrew trên OS X:
ruby 1.9.3p448 (2013-06-27 revision 41675) [x86_64-darwin12.4.0]

chỉnh sửa 2

7 ký tự

Kết hợp phiên bản đầu tiên của tôi (và / hoặc câu trả lời của @ Howard , để tham khảo chéo tối đa) với câu trả lời của @ china perl goth :

STDIN=0

Array=0tai nạn ngay lập tức.
primo

1
@primo tuyệt vời, nhưng tôi không thể làm cho nó hoạt động: / (Xem bản chỉnh sửa của tôi)
daniero

Tương tự ở đây, chỉ có điều này và câu trả lời stdin kết thúc hoạt động, tất cả những người khác chỉ đưa ra cảnh báo.
dùng12205

Vâng, một stdin làm việc cho tôi quá. Nó đã được đăng sau khi chỉnh sửa của tôi.
daniero

1
Bạn có thể rút ngắn dòng thứ hai =và nó vẫn gặp sự cố.
Fraxtil

10

12 ký tự

ruby không chính xác là tách trà của tôi, nhưng tôi vừa phát hiện ra rằng irb hoạt động rất buồn cười khi tôi đóng stdin :)

$stdin.close

đã thử nghiệm trên irb 0.9.6 (09/06/30) và ruby ​​1.9.3p194


5
STDIN.closehoạt động quá, và đó là 1 char ít hơn!
Kavu

+1 bởi vì nó quá rõ ràng khi bạn nhìn vào nó sẽ gây rắc rối :) Câu trả lời của tôi có lẽ là nhiều lỗi hơn, nhưng đối với điều này, bạn không thể thực sự mong đợi IRB sẽ làm bất cứ điều gì thông minh; Nó giống như trong Star Trek hoặc bất cứ điều gì khi họ hỏi một robot siêu thông minh một câu hỏi không thể và nó phát nổ.
daniero

Liên quan : $>.close.
Jordan

7

10 9 ký tự

Một biến thể ngắn hơn trên câu trả lời của @ daniero:

String=1
-

Điều này hoạt động ít nhất trong OS X Mavericks Ruby mặc định (2.0.0).

Câu trả lời về cơ bản dựa vào thực tế là Tokenhàm Ruby thực hiện casemã thông báo đầu vào. Một trong những trường hợp kiểm tra lại String, đã được xác định lại bởi dòng đầu tiên. Trường hợp này không thành công, vì vậy trường hợp rơi vào mặc định, giả sử đối tượng có một bộ truy cập ancestors(cái này không có).

Vì "lỗi" nằm trong mã thông báo, dòng đầu tiên sẽ không thành công vì dòng này chỉ có hiệu lực sau khi phân tích xong. Vì vậy, nó chỉ ảnh hưởng đến các dòng tiếp theo. Các dòng tiếp theo phải chứa một số loại toán tử để xem lỗi.


+1 Để giải thích. Nhưng daneiro này là ai? ;)
daniero

@daniero: Lời xin lỗi của tôi, tôi dường như là lysdexic ngày hôm nay.
nneonneo

6

5 ký tự

$>=$<

Đặt stdout thành stdin sẽ gây ra lỗi khi cố gắng mở stdin để viết và gặp sự cố irb.


Lưu ý rằng điều này đã được thử nghiệm trên ruby ​​2.3.0p0
quang hóa vào

5

22 ký tự

def method_missing;end

Rõ ràng nó gây rối với một số nội bộ irb. (Để sửa lỗi, thêm self.sau def.)


4

12 ký tự

def send;end

Theo như tôi biết, có bốn phương thức trong lớp Object thể hiện loại hành vi này:

send
method_missing
respond_to?
respond_to_missing?

4
Trong IRB của tôi, nó chỉ đơn giản là trả lại nilvà tiếp tục
daniero

@daniero 1.8.6 và 1.9.3 đều bị sập.
primo

@primo không còn bị treo trên 2.0.0
drusepth

4

5 nhân vật

IRB=0

Không có gì làm phiền IRB khá giống như xác định lại IRB.


Vâng! Điều này không sụp đổ, nhưng in lỗi 20 dòng sau bất cứ điều gì!
Mega Man

Có lẽ là một phiên bản khác của IRB bây giờ, @MegaMan vì vậy, chắc chắn là YMMV.
vgoff

Cả hai đều rất tuyệt!
Mega Man



0

26 + 1 = 27 ký tự

Điều này không phải là rất golf, nhưng tôi đã rất vui khi phát hiện ra nó một cách tình cờ và nghĩ rằng những người khác có thể thích nó.

class Fixnum;def +;end end

Tôi đã thêm +1 vào điểm số vì bạn phải nhấn Enter lần thứ hai sau khi nhập ở trên (nhưng không phải là +2 vì không ai khác tính Enter).

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.