Ruby数组不合作

可能重复:
什么时候ruby的Array.slice应该返回nil?

大家好……为什么当[5,1]返回[]并且[6,1]在两个起始元素明显超出范围时返回nil

irb(main):048:0> a = [ "a", "b", "c", "d", "e" ] => ["a", "b", "c", "d", "e"] irb(main):049:0> a[0] => "a" irb(main):050:0> a[4] => "e" irb(main):051:0> a[5,1] => [] irb(main):052:0> a[6,1] => nil 

谢谢!

我相信这是ruby实现的一个bug。

当你调用[5,1]时,ruby会调用以下函数

 VALUE rb_ary_subseq(VALUE ary, long beg, long len) { VALUE klass; if (beg > RARRAY_LEN(ary)) return Qnil; if (beg < 0 || len < 0) return Qnil; if (RARRAY_LEN(ary) < len || RARRAY_LEN(ary) < beg + len) { len = RARRAY_LEN(ary) - beg; } klass = rb_obj_class(ary); if (len == 0) return ary_new(klass, 0); return ary_make_partial(ary, klass, beg, len); } 

看到函数体中的第二行,我认为它应该是>=而不是>

报告了这个错误,似乎被拒绝了......请参阅http://redmine.ruby-lang.org/issues/4245

[5, 1]只有一个,而[6, 1]则不止一个。