3

我正在处理 Ruby Koans 中的 about_arrays.rb 文件,我注意到了这段代码,但我不确定为什么答案是这样的:

def test_slicing_arrays
  array = [:peanut, :butter, :and, :jelly]

  assert_equal [], array[4,0]
  assert_equal [], array[4,100]
  assert_equal nil, array[5,0]
end

根据 Ruby Koans 的输出,有人可以向我解释为什么array[4,0]会评估为[]array[5,0]评估为nil?. 为什么不array[5,0]评估到[]

出于好奇,我尝试了array[6,0],array[7,0]等等,但也得到了 nil。Ruby 是否为数组索引下一行添加了一些特殊的东西?


编辑:

我发现“ Ruby 中的数组切片:寻找不合逻辑行为的解释(取自 Rubykoans.com) ”,它提出了同样的问题,但我仍然不了解索引在数组切片中的工作原理。

4

1 回答 1

6

s[n, 0] 定义了一个字符之前或之后的位置,通常在一个字符之前和之后。

来源

切片的第一个参数是下限。当它是 时4,它仍然是数组的一部分,只是指向最后。当下限超出数组的长度时,它总是nil.

最好考虑元素值之间的空格偏移量。

红宝石小提琴

于 2013-02-25T01:32:07.717 回答