0

我正在学习 Ruby 教程(只是为了欢呼和咯咯笑),在尝试其中一个示例时,这种行为让我感到意外:

s = "hello"
s[1, 2]          # => "el"
s[1 .. 2]        # => "el"
s[-4 .. -3]      # => "el"
s[-4, -3]        # => nil ... but why?

我原以为最后一行会产生与前一行相同的结果。毕竟它以正切片值的方式工作。我哪里错了?

4

2 回答 2

4

因为切片的负长度没有意义。slice 方法采用索引,或索引范围,或开始和长度。

s[-4 .. -3] # here you're passing the slice method a range of numbers
s[-4, -3]   # here you're passing the slice method: start = -4, length = -3

s[-4, 2] => "el"

String 类的 slice 方法的文档

于 2012-05-30T19:20:02.693 回答
3

a[x, y]是“y元素来自a,开始于x

a[x..y]是“元素从xya

如果你试试这个,你会发现正数也不匹配——你只是巧合了:

a = [1, 2, 3, 4, 5, 6]
a[3, 2]   # [4, 5] (i.e. two elements from a, starting from the third)
a[3..2]   # []     (i.e. elements from third to second, from a)
于 2012-05-30T19:21:05.803 回答