Esta es una esquina extraña conocida fea. Eche un vistazo a los ejemplos en rdoc para Array#slice.
Este problema específico se muestra como un "caso especial"
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] #=> []
Si el principio es exactamente un elemento más allá del final de la matriz, entonces se volverá []
, una matriz vacía. Si el inicio está más allá de eso, nil
. Está documentado, aunque no estoy seguro de la razón para ello.
Su pregunta tiene menos ruido, pero desafortunadamente: posible duplicado de [Array slicing en Ruby: buscando explicación de comportamiento ilógico (tomado de Rubykoans.com)] (http://stackoverflow.com/questions/3568222/array- slicing-in-ruby-looking-for-explanation-for-illogical-behavior-taken-fr). En ambos casos, la sorpresa es la misma: nulo vs [] en el índice final. –
Guau, duplicado rechazado. ¿Por qué? –