2012-08-23 33 views
5

请有人能解释一下2..-1的范围对象的含义。2 ..- 1的范围是什么意思? (Ruby koans about_arrays.rb)

红宝石koans已about_arrays.rb如下:

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

    assert_equal [:peanut, :butter, :and], array[0..2] 
    assert_equal [:peanut, :butter], array[0...2] 
    assert_equal [:and, :jelly], array[2..-1] 
end 

下面的网站(从另一个答案找到)解释的范围如何与切片工作: Gary Wright, string/array slices 由此,我明白了为什么分给回答它的确如此。我不明白的是范围对象所指的范围。对于一个正常的范围内,我可以这样做:

(1..3).each { |x| puts(x) } 

当IRB执行其给出以下的输出:

1 
2 
3 
=> 1..3e 

然而,(2..-1).each { |x| puts(x) }给出:

=> 2..-1 

那么,是什么范围(2..-1)是什么意思?

回答

11

负指数表示“从数组末尾开始计数”。所以-1是数组中的最后一项。 2..-1意味着从第三项到最后一项。

+0

谢谢@DragoonWraith。也许我在错误地考虑范围对象。从你的答案,它的范围开始2(第三项)和结束-1(最后一项)。我想,让我感到困惑的是在分裂的背景之外,这意味着什么:2和-1之间的数字是什么?为什么'(2 ..- 1).each'什么都不打印? – Will

+0

@ will:数组中只有三个元素,所以'2'和最后一个之间没有任何内容; '2' *是最后一个。这就是为什么你没有看到任何东西。如果你尝试更大的阵列,你应该看到的东西。 – KRyan

+1

“2和-1之间有什么数字” - 无。 “为什么不(2 ..- 1)。每个都打印什么?” - 这就是为什么;-) –

相关问题