2012-08-23 7 views
5

Proszę kogoś, kto może wyjaśnić, co oznacza obiekt z zakresu 2..-1.Co oznacza zakres 2 ..- 1? (Ruby koans about_arrays.rb)

Ruby koany ma następujący w 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 

następującej stronie internetowej (znaleziono innej odpowiedzi) wyjaśnia, w jaki sposób pracować z zakresy krojenia: Gary Wright, string/array slices Z tego rozumiem, dlaczego split daje odpowiedz, że tak. Rzecz, której nie rozumiem, to: WHAT range, do której odnosi się obiekt range. Dla normalnego zakresu, co mogę zrobić:

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

co daje następujące dane wyjściowe, gdy wykonywane w IRB:

1 
2 
3 
=> 1..3e 

Jednak (2..-1).each { |x| puts(x) } daje:

=> 2..-1 

Więc co zasięg (2..-1) znaczy?

Odpowiedz

11

Indeks ujemny oznacza "odliczanie od końca tablicy." Tak więc -1 jest ostatnim elementem w tablicy. 2..-1 oznacza od trzeciej pozycji do ostatniej.

+0

Dzięki @DragoonWraith. Może źle myślę o obiekcie zasięgu. Z Twojej odpowiedzi wynika zakres od początku 2 (trzecia pozycja) i koniec -1 (ostatnia pozycja). Domyślam się, co mnie myli, co to znaczy poza kontekstem podziału: jakie liczby znajdują się pomiędzy "2 a -1; dlaczego '(2 ..- 1) .each' nic nie drukuje? – Will

+0

@Will: Masz tylko trzy elementy w swojej tablicy, więc nie ma nic pomiędzy "2" a ostatnim; '2' * jest * ostatnim. Dlatego nic nie widzisz. Jeśli spróbujesz z większą tablicą, powinieneś zobaczyć rzeczy. – KRyan

+1

"jakie są liczby" między "2 a -1" - Brak. "dlaczego nie (2 ..- 1). Czy drukujesz coś?" - Dlatego :-) –