2010-10-16 16 views
15
ruby-1.8.7-p174 > [0,1][2..3] 
=> [] 
ruby-1.8.7-p174 > [0,1][3..4] 
=> nil 

Dizin 2, 3 ve 4'ün 2 öğe dizisinin sınırlarının dışında olduğu 0 dizinli bir ayarda, bunlar neden farklı değerler döndürür?Ruby dizisi dizi erişimini nasıl yönetiyor?

+0

Sorunuz daha az gürültü içeriyor, ancak ne yazık ki: [Ruby'de dilimleme: Mantıksız davranışlar için açıklama (Rubykoans.com'dan alınmıştır)] (http://stackoverflow.com/questions/3568222/array- dilimleme-in-yakut görünümlü-için-bir açıklama-için-mantıksız-davranış-çekilen-fr). Her iki durumda da sürpriz aynıdır: nil vs [] end endeksinde. –

+0

Vay, kopya reddedildi. Niye ya? –

cevap

26

Bu çirkin garip bir köşedir. Array#slice için rdoc'daki örneklere bakın. Başlangıç ​​tam dizinin sonunu bir öğe, o zaman [] dönecektir , boş bir dizi ise

Bu özel konu "özel durum"

a = [ "a", "b", "c", "d", "e" ] 
    a[2] + a[0] + a[1] #=> "cab" 
    a[6]     #=> nil 
    a[1, 2]    #=> [ "b", "c" ] 
    a[1..3]    #=> [ "b", "c", "d" ] 
    a[4..7]    #=> [ "e" ] 
    a[6..10]    #=> nil 
    a[-3, 3]    #=> [ "c", "d", "e" ] 
    # special cases 
    a[5]     #=> nil 
    a[5, 1]    #=> [] 
    a[5..10]    #=> [] 

olarak listelenir. Başlangıç ​​bunun ötesinde ise, nil. Belgelendirilmiş olsa da, bunun nedenini bilmiyorum.

İlgili konular