Crash IRB (інтерактивний Ruby)


18

Ruby поставляється із вбудованою REPL, що досить зручно.

скріншот IRB

Ваше завдання полягає в тому, щоб збити його з найменшою кількістю коду!

Визначення "краху" - це "змусити його вийти ненавмисно ". Це означає exit, quit, abort, irb_exit, irb_quit, і ін. ін. не вірні відповіді.

Крім того, ви не можете викликати будь-які побічні ефекти в будь-якій іншій частині системи. Наприклад, `rm -rf /`також не вірно.

Будь-яка версія 1.9.3 або вище є дійсною. Якщо ваш код працює лише на певній версії Ruby, ви можете вказати це у відповіді.

Остаточне обмеження полягає в тому, що ви можете не покладатися на будь-які дорогоцінні камені.

Це , тому найкоротший код, який вибиває IRB, виграє!


Я можу небезпечно гольфскрипт anser, plz?
Цифрова травма

3
Ого. я не знаю рубіну, і прочитавши ці відповіді, я ніколи його не дізнаюся.
izabera

"Визначенням" аварії "є" змусити його вийти ненавмисно. " Я голосую за те, щоб закрити як незрозуміло, що ви просите.
msh210

Відповіді:


6

5 символів

ENV=0

(натхненний відповіддю @daniero )


не працює для мене:irb(main):001:0> ENV=0 (irb):1: warning: already initialized constant ENV
Брайан Мінтон,

@BrianMinton Мав під рукою лише 1.9.3p194, і він "працює" з цією версією.
Говард

ах, моя версія досить стара:irb 0.9.6(09/06/30)
Брайан Мінтон,

1
@BrianMinton, це остання версія irb
DarkHeart

17

16 символів

String=0
String=0

Не найкоротший, але я думаю, що це смішно, що він не виходить з ладу до другого рядка. Створює приблизно 20 рядків тексту до виходу IRB. Чомусь його не можна скоротити, наприклад 2.times{String=0}.


редагувати

З усіх відповідей поки що це єдиний, хто працював на мене (і він працює у всіх версіях, на які я міг би отримати свої руки), і я перевірив їх у цих версіях:

Про будь-який тип Linux, який я отримую під час навчання sshв своєму університеті:
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 за замовчуванням:
ruby 2.0.0p247 (2013-06-27 revision 41674) [universal.x86_64-darwin13]
Встановлено через Homebrew в OS X:
ruby 1.9.3p448 (2013-06-27 revision 41675) [x86_64-darwin12.4.0]

редагувати 2

7 символів

Поєднання моєї першої версії (та / або відповіді @ Говарда , для максимального перехресного посилання) з відповіддю @ chinese perl Goth :

STDIN=0

Array=0вибивається негайно.
прим

1
@primo круто, але я не можу змусити його працювати: / (Дивіться мою
редакцію

Те саме тут, лише ця і завершальна строгі відповіді працюють, всі інші дають лише попередження.
користувач12205

Так, stdin одна працює і для мене. Він був розміщений після моєї редакції.
daniero

1
Ви можете скоротити другий рядок до, =і він все одно вийде з ладу.
Fraxtil

10

12 символів

Рубін - це не моя чашка чаю, але я тільки що дізнався, що irb діє смішно, коли я закриваю stdin :)

$stdin.close

тестований на irb 0.9.6 (09.06.30) та ruby ​​1.9.3p194


5
STDIN.closeпрацює теж, і це на 1 менше чарів!
Каву

+1, тому що це так очевидно, коли ви дивитесь на це, що це спричинить проблеми :) Моя відповідь, ймовірно, більше помилка, але для цього ви не можете реально очікувати, що IRB зробить щось розумне; це як у Star Trek чи як завгодно, коли вони задають супер інтелігентному роботу неможливе питання, і воно вибухає.
daniero

Пов'язаний: $>.close.
Йорданія

7

10 9 символів

Коротший варіант у відповіді @ daniero:

String=1
-

Це працює принаймні у стандартній версії OS X Mavericks Ruby (2.0.0).

Відповідь, по суті, спирається на те, що Tokenфункція Ruby робить a caseна вхідному маркері. Один із випадків перевірки проти String, який був перероблений першим рядком. Цей випадок виходить з ладу, тому випадок потрапляє до типового значення, що передбачає, що об'єкт має ancestorsаксесуар (чого він не робить).

Оскільки "помилка" знаходиться в токенізаторі, перший рядок не вийде з ладу, оскільки рядок набуває чинності лише після завершення розбору. Таким чином, це впливає лише на наступні рядки. Подальші рядки повинні містити певного оператора, щоб побачити помилку.


+1 Для пояснення. Але хто цей данейро? ;)
daniero

@daniero: Мої вибачення, я, здається, сьогодні лідексичний.
nneonneo


5

22 символи

def method_missing;end

Мабуть, він заплутався з деякими внутрішніми внутрішніми. (Щоб виправити це, додайте self.після def.)


4

12 символів

def send;end

Наскільки мені відомо, у класі Object є чотири методи, які показують такий тип поведінки:

send
method_missing
respond_to?
respond_to_missing?

4
У моєму IRB це просто повертається nilі продовжує
daniero

@daniero 1.8.6 та 1.9.3 обидва аварії.
примо

@primo більше не виходить з ладу 2.0.0
drusepth

4

5 персонажів

IRB=0

Ніщо не заважає IRB так само, як перевизначення IRB.


Ага! Це не виходить з ладу, але виводить помилки на 20 рядків після нічого!
Mega Man

Можливо, інша версія IRB зараз, @MegaMan, так що, безумовно, YMMV.
vgoff

Обидва круті, все одно!
Мега Людина



0

26 + 1 = 27 символів

Це не дуже гостро, але мені було цікаво відкрити це випадково і подумав, що іншим це може сподобатися.

class Fixnum;def +;end end

Я додав +1 до оцінки, тому що вам потрібно натиснути Enter вдруге після введення вищезазначеного (але не +2, оскільки ніхто більше не рахував Enter).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.