2017-10-04 272 views
0

文獻爲Array#slice的特殊情況表示:紅寶石陣列切片

[A] n的當一個元素範圍的起始索引是在所述陣列的前端返回空數組。

如果索引(或起始索引)超出範圍,則返回nil。

考慮到這一點,

a = ["a","b","c","d","e"] 

a[6,1] # => nil 
a[5,1] # => [] 
a[5..10] # => [] 

爲什麼a[5,1]a[5..10]返回鑑於5不是數組的末尾空數組?它應該沒有索引,因此它應該返回nil

回答

2

您的困惑源於缺少索引定義「在範圍的末尾」。對於任何陣列arr,索引i在範圍的末尾,i等於arr.size,即索引等於最後一個元素的索引加1。

對於a[5,1] #=> [],5,起始索引是「在範圍的末尾」,因爲a.size #=> 5。因此,無論第二個參數的值是什麼(最好用「大小」來描述,而不是「索引」),doc應該返回一個空數組。例如,

a[5,1]   #=> [] 
a[5, 1_000_000] #=> [] 
a[6,1]   #=> nil 

對於a[5..10]我們有同樣的結果。

+0

這非常有道理。這隻發生在我們使用索引範圍對數組進行切片時,我是對的嗎?由於[5]仍然會返回零 – aDev

+1

我想你的意思是說「當我== arr.size'。」 – moveson

+0

是的,因爲'5'不是一個範圍,'a [5]'是在索引'5'處的'a'的值。對於所有'i> = a.size',a [i]#=> nil'。 –