Đâ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â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. –
Ồ, trùng lặp bị từ chối. Tại sao? –