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

Trong cài đặt 0 chỉ mục trong đó chỉ mục 2, 3 và 4 tất cả nằm ngoài giới hạn của mảng 2 mục, tại sao các giá trị này trả về các giá trị khác nhau?Ruby xử lý phạm vi truy cập mảng như thế nào?

+0

Câu hỏi của bạn có ít tiếng ồn hơn, nhưng rất tiếc: có thể trùng lặp [Cắt mảng trong Ruby: tìm kiếm lời giải thích cho hành vi phi logic (lấy từ Rubykoans.com)] (http://stackoverflow.com/questions/3568222/array- cắt-trong-ruby-tìm-cho-giải thích-cho-illogical-hành vi-lấy-fr). Trong cả hai trường hợp, sự ngạc nhiên là như nhau: nil vs [] ở chỉ mục kết thúc. –

+0

Ồ, trùng lặp bị từ chối. Tại sao? –

Trả lời

26

Đây là góc kỳ lạ xấu xí đã biết. Hãy xem các ví dụ trong rdoc cho Array#slice.

vấn đề cụ thể này được liệt kê như là một "trường hợp đặc biệt"

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]    #=> [] 

Nếu bắt đầu là chính xác một mục ngoài cuối mảng, sau đó nó sẽ trở lại [], một mảng trống. Nếu bắt đầu vượt quá điều đó, nil. Đó là tài liệu, mặc dù tôi không chắc chắn về lý do cho nó.

Các vấn đề liên quan