崩溃IRB(交互式Ruby)


18

Ruby带有内置的REPL,非常方便。

IRB的屏幕截图

您面临的挑战是以最少的代码将其崩溃!

“崩溃”的定义是“使其意外退出”。这意味着exitquitabortirb_exitirb_quit,等。等 不是有效的答案。

此外,您可能不会对系统的任何其他部分造成任何副作用。例如,`rm -rf /`也无效。

任何1.9.3或更高版本均有效。如果您的代码仅适用于特定版本的Ruby,则可以在答案中进行指定。

最后的限制是您不能依赖任何宝石。

这是,因此使IRB崩溃的最短代码将获胜!


我可以去golfscript分析器,请问?
Digital Trauma 2014年

3
哇。我不了解红宝石,阅读这些答案后,我将永远不会学它。
izabera 2014年

““崩溃”的定义是“使其意外退出。””我们应该如何编写旨在执行意外操作的代码?由于不清楚您要问什么,我投票决定关闭。
msh210 '16

Answers:



17

16个字符

String=0
String=0

不是最短的,但我认为直到第二行才崩溃,这很有趣。在IRB退出之前生成大约20行文本。由于某种原因,它不能缩短为例如2.times{String=0}


编辑

在到目前为止的所有答案中,这是唯一对我有用的答案(并且可以在我可以使用的所有版本中使用),并且我已经在以下版本中测试了所有答案:

ssh我上大学 时会使用哪种Linux :
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立即崩溃。
primo 2014年

1
@primo很酷,但我无法使它工作:/(请参阅我的编辑)
daniero 2014年

同样在这里,只有这个和标准的stdin答案起作用,其他所有都只给出警告。
user12205 2014年

是的,标准输入也对我有用。它是在我编辑后发布的。
daniero 2014年

1
您可以将第二行缩短到=,但仍然会崩溃。
Fraxtil 2014年

10

12个字符

红宝石并不完全是我的茶,但是我刚刚发现当我关闭标准输入时,irb表现得很有趣。

$stdin.close

在irb 0.9.6(09/06/30)和ruby 1.9.3p194上测试


5
STDIN.close也可以,而且少了1个字符!
卡武2014年

+1是因为它在您看时很明显,以至于会引起麻烦:)我的回答可能更多是一个错误,但是对于这个错误,您不能真正期望IRB做任何聪明的事情;就像在《星际迷航》中,或者什么情况下,当他们问一个超级智能机器人一个不可能的问题并爆炸时。
daniero 2014年

相关:$>.close
乔丹

7

10 9个字符

@daniero的答案的一个较短的变体:

String=1
-

这至少在默认的OS X Mavericks Ruby(2.0.0)中有效。

答案基本上取决于Ruby Token函数case对输入令牌执行a 的事实。其中一种情况是根据进行检查的String,第一行已对其进行了重新定义。这种情况失败了,因此情况变为默认值,即假定该对象具有ancestors访问器(但没有访问器)。

由于“错误”位于令牌生成器中,因此第一行不会失败,因为该行仅在解析完成后才生效。因此,它仅影响后续行。随后的行必须包含某种运算符,以便查看故障。


+1进行解释。但是这个daneiro是谁?;)
daniero 2014年

@daniero:对不起,我今天看起来很清白。
nneonneo 2014年

6

5个字符

$>=$<

将stdout设置为stdin会导致尝试打开stdin进行写入并抛出错误,并使irb崩溃。


请注意,这是在红宝石2.3.0p0上测试的-于2016
光电离

5

22个字符

def method_missing;end

显然,它与一些irb内部结构混在一起。(要解决此问题,请在self.之后添加def。)


4

12个字符

def send;end

据我所知,Object类中有四个方法显示了这种行为:

send
method_missing
respond_to?
respond_to_missing?

4
在我的IRB它只是返回nil并进行
达尼罗

@daniero 1.8.6和1.9.3都崩溃。
primo 2014年

@primo不再在2.0.0时崩溃
drusepth 2014年

4

5个字符

IRB=0

没有什么比重新定义IRB更能打扰IRB了。


是的 这不会崩溃,但是会打印出20行错误!
Mega Man

现在可能是IRB的另一个版本@MegaMan,所以现在绝对是YMMV。
vgoff

两者都很酷!
Mega Man



0

26 + 1 = 27个字符

这不是高尔夫运动,但我很偶然地发现了它,并以为其他人会喜欢它而感到很有趣。

class Fixnum;def +;end end

我在分数上添加了+1,因为您在输入以上内容后必须再次按Enter键(但不+2,因为没有人计数Enter)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.