以下块将显示ruit
puts "fruit"[1..-1]
因为索引从1开始,我认为在这种情况下-1表示无穷大
f r u i t
0 1 2 3 4
但是如果我想使用反向索引,它就不起作用。
按照相同的逻辑,我希望这会返回ruit
,因为0表示无穷大
puts "fruit"[-4..0]
f r u i t
-5 -4 -3 -2 -1
然而,这实际上什么都没有。再次使用1而不是0
进行尝试puts "fruit"[-4..1]
f r u i t
-5 -4 -3 -2 -1
它只返回r
-
尝试使用5而不是4
puts "fruit"[-5..1]
f r u i t
-5 -4 -3 -2 -1
取得了一些进展,它返回fr
。
-
然而,似乎我不理解反向索引。 -1
中的[1..-1]
不是无穷大吗?当你试图反过来时为什么不起作用?
答案 0 :(得分:3)
只是负指数代表从末尾算起的位置,对于正指数i
和负指数j
,它们表示相同的位置,当且仅当< / p>
i % string.length == j % string.length
假设i
和j
的绝对值小于string.length
。
您声称不起作用的案例是起始位置位于结束位置右侧的情况。
答案 1 :(得分:2)
负数不是“无限”,它们只是表示从字符串末尾开始计数。 -1
是最后一个字符,-2
是最后一个字符。
"abcde"[-1]
#=> "e"
如果你正在做范围,他们应该总是最低 .. 最高,而在String#[]
的情况下,你必须避免包裹在...字符串。你-5..1
的例子实际上已经包含了,所以Ruby放弃了,而是选择了0..1
。尽量不要混淆和匹配负值和正值。
0
永远不代表无穷大,它代表字符串的开头。你在这里遇到的是尝试用坏参数做的方法。
答案 2 :(得分:1)
您可以查看this question。
简短回答:在Ruby数组中,负数表示数组末尾的顺序,因为在Ruby中
:001 > -0 == 0
=> true
然后
"zero"[0] == "zero"[-0]
你不能使用&#34;负零&#34;引用不同的元素。 所以,数组的最后一个元素用-1表示。您可以将其视为基于一个的负数组索引,如God intended。
因此,[1..-1]
表示从第二个元素到最后一个元素的计数。