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

En una configuración de índice 0 donde los índices 2, 3 y 4 están, de hecho, fuera de los límites de la matriz de 2 elementos, ¿por qué devolverían valores diferentes?¿Cómo maneja ruby ​​el rango de array?

+0

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. –

+0

Guau, duplicado rechazado. ¿Por qué? –

Respuesta

26

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.

Cuestiones relacionadas