2012-08-23 5 views
5

2..-1の範囲オブジェクトが何を意味するのか説明してください。2 .. 1の範囲はどういう意味ですか? (Ruby koans about_arrays.rb)

Rubyのkoans 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 

(別の答えは見つかり)は、次のウェブサイトは、範囲がスライスで作業方法を説明します。 Gary Wright, string/array slices このことから、分割ができますなぜ私は理解して答えます。私が理解していないことは、rangeオブジェクトが参照している範囲です。正常範囲のために、私が行うことができます。IRBで実行する場合は、次の出力が得られます

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

1 
2 
3 
=> 1..3e 

しかし、(2..-1).each { |x| puts(x) }が与える:範囲を行いだから何

=> 2..-1 

(2..-1)

答えて

11

負のインデックスは、「配列の最後から数える」ことを意味します。したがって、-1は配列の最後の項目です。 2..-1は、3番目のアイテムから最後のアイテムまでを意味します。

+0

ありがとう@DragoonWraith。たぶん私は範囲オブジェクトについて間違って考えています。あなたの答えから、その範囲は開始点2(3番目の項目)と最後の-1(最後の項目)です。私が混乱しているのは、分裂の文脈の外でこれが何を意味しているのかということです.2と-1の間の数字は何ですか?なぜ '(2 ..- 1).each'は何も印刷しないのですか? – Will

+0

@ウィル:配列には3つのアイテムしかないので、 '2'と最後のものの間には何もありません。 '2' *は最後のものです。だからあなたは何も見ていないのです。より大きな配列を試そうとすると、物事が見えるはずです。 – KRyan

+1

"2と-1の間の数字は何ですか - なし。 "なぜ(2 ..- 1)それぞれの印刷物はありませんか?" - それが理由です:-) –

関連する問題