Ruby поставляется со встроенным REPL, что очень удобно.
Ваша задача состоит в том, чтобы разбить его на минимальное количество кода!
Определение «сбой» - «заставить его выйти непреднамеренно ». Это означает exit
, quit
, abort
, irb_exit
, irb_quit
, и др. и др. не действительные ответы.
Кроме того, вы не можете вызывать побочные эффекты для любой другой части системы. Например, `rm -rf /`
тоже недействительно.
Любая версия 1.9.3 или выше действительна. Если ваш код работает только с определенной версией Ruby, вы можете указать это в ответе.
Последнее ограничение заключается в том, что вы не можете полагаться на какие-либо драгоценные камни.
Это код-гольф , поэтому выиграет самый короткий код IRB!
Ответы:
5 персонажей
(вдохновленный ответом @daniero )
источник
irb(main):001:0> ENV=0 (irb):1: warning: already initialized constant ENV
irb 0.9.6(09/06/30)
16 символов
Не самое короткое, но я думаю, что забавно, что он не падает до второй строки. Генерирует примерно 20 строк текста перед выходом из IRB. По какой-то причине его нельзя сократить, например
2.times{String=0}
.редактировать
Из всех ответов на данный момент это единственный, который сработал для меня (и он работает во всех версиях, которые я мог заполучить), и я протестировал все из них в следующих версиях:
На любом типе Linux, который я получаюssh
, поступая в мой университет: Mac OS X Mavericks по умолчанию: Установлено через Homebrew на OS X:редактировать 2
7 персонажей
Объединение моей первой версии (и / или ответа @ Howard , для максимальной перекрестной ссылки) с ответом @ Chinese perl goth :
источник
Array=0
вылетает сразу.=
и она все еще падает.12 символов
ruby - не совсем моя чашка чая, но я только что узнал, что irb ведет себя забавно, когда я закрываю stdin :)
протестировано на irb 0.9.6 (09/06/30) и ruby 1.9.3p194
источник
STDIN.close
тоже работает, и это на 1 символ меньше!$>.close
.109 символовБолее короткий вариант ответа @ daniero:
Это работает по крайней мере в стандартном OS X Mavericks Ruby (2.0.0).
Ответ в основном основан на том факте, что
Token
функция Ruby выполняетcase
входной токен. Один из случаев проверяетString
, который был переопределен первой строкой. Этот случай терпит неудачу, поэтому случай падает до значения по умолчанию, которое предполагает, что объект имеет средствоancestors
доступа (которого у него нет).Так как в токенизаторе есть «ошибка», первая строка не будет ошибочной, потому что строка вступает в силу только после завершения анализа. Таким образом, это влияет только на последующие строки. Последующие строки должны содержать какой-то оператор, чтобы увидеть сбой.
источник
5 персонажей
Устанавливает stdout в stdin, который выдает ошибку при попытке открыть stdin для записи и вылетает irb.
источник
22 персонажа
По-видимому, это портит некоторые внутренние компоненты. (Чтобы исправить это, добавьте
self.
послеdef
.)источник
12 персонажей
Насколько я знаю, в классе Object есть четыре метода, которые показывают такое поведение:
источник
nil
и продолжает5 персонажей
Ничто так не мешает IRB, как переопределение IRB.
источник
1210 персонажейЯ не знаю, считается ли это из-за
exec
источник
exec
8 символов
Похоже на ответ китайского Perl Goth :
$>
это псевдоним для STDOUT.источник
26 + 1 = 27 символов
Это не очень похоже на игру в гольф, но я был удивлен, обнаружив это случайно, и подумал, что другим это понравится.
Я добавил +1 к счету, потому что вы должны нажать Enter второй раз после ввода вышеуказанного (но не +2, потому что никто больше не считал Enter).
источник