Ruby Koans数组切片疑问:为何array[4,0]与array[4,100]返回空数组?
Ruby数组切片返回空数组而非nil的原因
先看你测试里的数组array = [:peanut, :butter, :and, :jelly],它的长度是4,有效索引范围是0到3。Ruby中Array#[]方法用两个整数参数(array[起始索引, 取数长度])时,行为是按以下逻辑设计的:
起始索引等于数组长度时:
这个位置是数组的「末尾边界」——刚好在最后一个元素的后面,属于合法的位置。- 像
array[4,0],从这个边界位置取0个元素,结果就是空数组[],逻辑上完全合理。 - 像
array[4,100],从这个边界位置往后想取100个元素,但后面根本没有元素,所以也返回空数组[]——因为起始位置是合法的,只是没元素可拿。
- 像
起始索引大于数组长度时:
比如array[5,0]里的索引5,已经超出了数组的有效范围(连边界位置都不是),这种情况下不管你要取多少个元素,都会返回nil,表示这个起始位置根本不存在。
说白了,Ruby的这个设计就是把「合法边界的空取值」和「完全越界的索引」区分开:前者返回空数组(说明位置合法但没元素),后者返回nil(说明位置本身就不存在)。
内容的提问来源于stack exchange,提问作者sonic
相关产品推荐
相关产品推荐

