2010-07-21 12 views
2

可能重複:
Why does array.slice behave differently for (length, n)紅寶石公案 - 約陣列 - test_accessing_array_elements陣列[5,0]

在Ruby公案 「about_arrays.rb」,test_accessing_array_elements有兩個相似的啓動/長度slice語句訪問數組的一部分。參考下面的提取。兩者都應該是「超出範圍」,但一個返回一個空數組,另一個返回零。這符合文檔ruby doc的可能結果。爲什麼這樣?

irb(main):221:0> array = [:peanut, :butter, :and, :jelly] 
=> [:peanut, :butter, :and, :jelly] 
irb(main):222:0> array[4,0] 
=> [] 
irb(main):223:0> array[5,0] 
=> nil 
irb(main):224:0> 
irb(main):224:0> array[4] 
=> nil 
irb(main):225:0> array[5] 
=> nil 
irb(main):226:0> 
+0

我在本週運行Ruby koans時遇到了這個問題,最後在irc的#ruby上詢問了這個問題。該房間的共識是「錯誤的」或「設計錯誤」,因爲這是值得的。 (該行爲在'Array#slice'文檔中有記錄,儘管對「特殊情況」的描述並不令人鼓舞。) – Telemachus 2010-07-21 10:47:25

+0

Chris是正確的,重複了[why-does-array-slice-behave-different-對於長度N](http://stackoverflow.com/questions/3219229/why-does-array-slice-behave-differently-for-length-n) – Straff 2010-07-21 09:10:04

回答

2

我認爲它是一些陣列方法參照的間隙的元件之間,而非元件本身,即0是第一個元素,1,第一和第二元件之間的空間之前的空間。考慮到這種方式,該操作的意義稍微有點,因爲4是第四個元素之後的間隔,它仍然在數組內,所以這個位置的零個元素是一個空數組。

您可以用相同的方式來思考插入方法(儘管文檔中明確指出)。

但是,這可能是一個精神把戲,而不是一個解釋 - 也許它可以幫助某人。