2012-08-23 8 views
5

Por favor, alguien podría explicar qué significa un objeto de rango de 2..-1.¿Qué significa un rango de 2 ..- 1? (Ruby koans about_arrays.rb)

koanes Ruby tiene lo siguiente en about_arrays.rb:

def test_slicing_with_ranges 
    array = [:peanut, :butter, :and, :jelly] 

    assert_equal [:peanut, :butter, :and], array[0..2] 
    assert_equal [:peanut, :butter], array[0...2] 
    assert_equal [:and, :jelly], array[2..-1] 
end 

La siguiente página web (que se encuentra de otra respuesta) explica cómo funcionan los rangos con rebanar: Gary Wright, string/array slices A partir de este, entiendo por qué la división da la responde que sí. Lo que no entiendo es a qué rango se refiere el objeto rango. Para un rango normal, lo que puedo hacer:

(1..3).each { |x| puts(x) } 

que da el siguiente resultado cuando se ejecuta en el IRB:

1 
2 
3 
=> 1..3e 

Sin embargo, (2..-1).each { |x| puts(x) } da:

=> 2..-1 

Entonces, ¿qué hace la gama (2..-1) significa?

Respuesta

11

Un índice negativo significa "contar desde el final de la matriz". Entonces -1 es el último elemento de la matriz. 2..-1 significa desde el tercer elemento hasta el último.

+0

Gracias @DragoonWraith. Tal vez estoy pensando en el objeto rango incorrectamente. De su respuesta, es un rango con un inicio de 2 (tercer elemento) y un final de -1 (último elemento). Supongo que lo que me confunde es qué significa esto fuera del contexto de la división: qué números están 'entre' el 2 y -1; ¿por qué '' (2 ..- 1) .each' no imprime nada? – Will

+0

@Will: solo tiene tres elementos en su matriz, por lo que no hay nada entre '2' y el último; '2' * es * el último. Es por eso que no estás viendo nada. Si intentas con una matriz más grande, deberías ver las cosas. – KRyan

+1

"qué números son 'entre' el 2 y -1" - Ninguno. "¿Por qué no (2 ..- 1) cada uno imprime algo?" - Es por eso ;-) –

Cuestiones relacionadas