我正在学习 Ruby 教程(只是为了欢呼和咯咯笑),在尝试其中一个示例时,这种行为让我感到意外:
s = "hello"
s[1, 2] # => "el"
s[1 .. 2] # => "el"
s[-4 .. -3] # => "el"
s[-4, -3] # => nil ... but why?
我原以为最后一行会产生与前一行相同的结果。毕竟它以正切片值的方式工作。我哪里错了?
我正在学习 Ruby 教程(只是为了欢呼和咯咯笑),在尝试其中一个示例时,这种行为让我感到意外:
s = "hello"
s[1, 2] # => "el"
s[1 .. 2] # => "el"
s[-4 .. -3] # => "el"
s[-4, -3] # => nil ... but why?
我原以为最后一行会产生与前一行相同的结果。毕竟它以正切片值的方式工作。我哪里错了?
因为切片的负长度没有意义。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"
a[x, y]
是“y
元素来自a
,开始于x
”
a[x..y]
是“元素从x
到y
从a
”
如果你试试这个,你会发现正数也不匹配——你只是巧合了:
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)