2009-05-13 11 views
4

私は可変長の配列を使用し、配列の長さを圧縮して変換するメソッドを書いています。Rubyには何も見えない配列終了がありますか?

このメソッドでは、配列の長さは50〜126のいずれかを使用できます。 ..呼び出されたときにパラメータに基づいてそれらを変換します。これは、メソッド呼び出しで指定された範囲に動的にアクセスしていることを意味します。これは、存在しない配列のインデックスにアクセスすることを意味します。これに加えて、私がアクセスしている範囲は等しいかもしれません。私のどこに問題があるこれは次のようになります。なぜ起こるか誰もが知ってい範囲でそれにアクセスする際に、他の非存在インデックス

>> a = [0, 1, 2, 3, 4] 
# => [0, 1, 2, 3, 4] 

>> a[5] 
# => nil 

>> a[4..4] 
# => [4] 

>> a[6..6] 
# => nil 

>> a[5..5] 
# => [] <------GGRAAAAAhhh!!! Thought you were nil 

>> a[5..7] 
# => [] <-------you too 

>> a[6..7] 
# => nil <-----but you are behaving 

とは対照的に、配列の終端ポケットは、動作がおかしいと思われますか?私のコードのための空の配列に対する追加のテストですが、私は一日中私のレールアプリでこのバグを追い払った後にもっと興味があります。 FWIWは、私は、Mac OS X上のRuby 1.8.6を実行しています、パッチレベル114

答えて

2

外の範囲の範囲選択は特殊なケースであり、あたりとして働きますドキュメント:

http://www.ruby-doc.org/core/classes/Array.html#M002183

私はそれが正確に明らかではないことに同意するものと思いますけど。

+0

Mr Mattが1分で勝ったが、私は両方の回答を投票した。ありがとうございます – BushyMark

0

Ruby Arraysの機能です。最初の終点が長さに等しい配列のサブセットをとっている場合にのみ発生します。

a = [1,2,3] 
a[3..3] = [4,5] # a = [1,2,3,4,5] 

EDIT:実際には、あなたが任意の範囲で行うことができ

それは、このような事をすることができます。私の悪い。

+0

はい、私はまだあなたが何かをしていると思っています。[3..3]があなたのケースでnilを返した場合、そのように配列の最後に追加することができないからです。終わりまで追加して、終わりを含むどの位置にも追加しない場合、私はa = a + [4,5]または<< 4 << 5を好むでしょう。 –

関連する問題