2 ..- 1的范围是什么意思?(Ruby koans about_arrays.rb)

Wil*_*ill 6 ruby

请有人解释一下范围对象是什么2..-1意思.

Ruby 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
Run Code Online (Sandbox Code Playgroud)

下面的网站(从另一个答案中找到)解释了范围如何与切片一起工作: Gary Wright,字符串/数组切片 从这里,我理解为什么拆分给出了答案.我不明白的是范围对象所指的范围.对于正常范围,我可以这样做:

(1..3).each { |x| puts(x) }
Run Code Online (Sandbox Code Playgroud)

在irb中执行时给出以下输出:

1
2
3
=> 1..3e
Run Code Online (Sandbox Code Playgroud)

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

=> 2..-1
Run Code Online (Sandbox Code Playgroud)

那么范围(2..-1)意味着什么?

KRy*_*yan 12

负指数表示"从数组的末尾开始计数".这-1是数组中的最后一项.2..-1表示从第三项到最后一项.

  • @Will:A [Range](http://ruby-doc.org/core-1.9.3/Range.html)有两个不同的目的:(1)一对端点(2)一个Enumerable,范围介于终点.所以你可以说`r = 1.1 .. 1.2`并且使用终点就好了但是`r.each`会失败. (5认同)