今天,我发现了在Ruby中分割数组的有趣方法:
a = [0,1,2,3,4]
p a[...4] == a[0...4] # True
p a[...4] # [0,1,2,3]
请解释一下这是怎么回事.(...4) => (nil...4)
.但在写入(...4).to_a
时出现错误:无法从NilClass迭代.
今天,我发现了在Ruby中分割数组的有趣方法:
a = [0,1,2,3,4]
p a[...4] == a[0...4] # True
p a[...4] # [0,1,2,3]
请解释一下这是怎么回事.(...4) => (nil...4)
.但在写入(...4).to_a
时出现错误:无法从NilClass迭代.
Ruby 2.6引入了无穷无尽的范围:
# It's the same
2..
2..nil
Range.new(2, nil)
Ruby 2.7引入了无起点的范围:
# It's the same
..2
nil..2
Range.new(nil, 2)
Array#[]
WITH RANGE返回由索引范围指定的子数组
索引从0开始,因此当使用无开始范围时,它返回从第一个元素到指定元素的子array.同样地,对于无尽的
同时,您不会遍历这些范围,您只需要获取与这些范围匹配的元素
a = [0, 1, 2, 3, 4]
a[..2] # => [0, 1, 2]
a[2..] # => [2, 3, 4]
但是当您try 将无开始/无限范围转换为数组(或try 迭代它)时,当然会得到异常,因为数组不可能有无限数量的元素,数组总是有大小
这就是为什么(2..).to_a
和(..2).to_a
会引发异常