2012-08-23 10 views
5

Si prega di qualcuno potrebbe spiegare che cosa significa un oggetto intervallo di 2..-1.Che cosa significa un intervallo di 2 ..- 1 significa? (Ruby koans about_arrays.rb)

rubino koan ha le seguenti in 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 

Il seguente sito web (trovato da un'altra risposta) spiega come campi di lavoro con affettare: Gary Wright, string/array slices Da questo, capisco perché la spaccatura dà la rispondi lo fa. La cosa che non capisco è WHAT range a cui si riferisce la gamma dell'oggetto. Per un range di normalità, non posso fare:

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

che dà il seguente output quando eseguito in IRB:

1 
2 
3 
=> 1..3e 

Tuttavia, (2..-1).each { |x| puts(x) } dà:

=> 2..-1 

Così che cosa fa la gamma (2..-1) significa?

risposta

11

Un indice negativo indica "il conteggio dalla fine dell'array". Quindi -1 è l'ultimo elemento nell'array. 2..-1 significa dal terzo elemento all'ultimo.

+0

Grazie a @DragoonWraith. Forse sto pensando all'oggetto range in modo errato. Dalla tua risposta, è un intervallo con un inizio di 2 (terzo elemento) e una fine di -1 (ultimo elemento). Credo che ciò che mi confonde è cosa significa questo al di fuori del contesto della scissione: quali numeri sono "tra" il 2 e il -1; perché '(2 ..- 1) .each' non stampa nulla? – Will

+0

@Will: hai solo tre elementi nell'array, quindi non c'è niente tra "2" e l'ultimo; '2' * è * l'ultimo. Ecco perché non stai vedendo nulla. Se provi con un array più grande, dovresti vedere le cose. – KRyan

+1

"quali numeri sono 'tra' 2 e -1" - Nessuno. "perché non (2 ..- 1) .è stampato qualcosa?" - Ecco perché ;-) –