2011-08-11 6 views
4

混乱アレイの(array.size -1)より

array = [:a,:b,:c,:d] # with 4 elements: 

array[3] => :d # zero-based indices, I get that 
array[4] => nil 
array[5] => nil 

array[3,0] => [] # OK since I asked for a slice with zero elements 
を考える

DOCO大きいインデックスを起動[長さ、スタート]それはが「(インデックスならnilを返すことを言いますまたは開始インデックス)が範囲外です。 " come array[4,0]nilとは対照的に、配列を返す方法

array[5,0] => nil # OK 
array[4,0] => [] # Hunh?? 

[編集]このように見えますが、すでに来ている:説明は手を振って少し手のように見えますが、私はそれのために解決し、ちょうどルビーはここPLSに違反することを受け入れるだろう私にArray slicing in Ruby: looking for explanation for illogical behaviour (taken from Rubykoans.com)

を参照してください。

+1

[Array slicing in Ruby:非論理的な動作の説明を探す(Rubykoans.comから取得)](http://stackoverflow.com/questions/3568222/array-slicing-in-ruby-looking-for)非論理的な行動のための説明 –

答えて

1

私はドキュメントが正しく動作を語っていないと信じています。しかし、直感的に言えば、賞賛は理にかなっています。配列の先頭に0要素の「スライバー」を定義することが可能であるように、すべての要素の前にarray[0,0]のインデックスを付ける前に、対称的に、要素の最後に0要素の「スライバー」を得ることも可能でなければなりません。配列、すべての要素の後に、インデックスarray[array.size,0]によって。別の例としては、配列全体をインデックスすることによって配列のコピーを得ることが直感的に可能でなければならないということです。つまり、array[0,array.size]です。開始インデックスが配列サイズと等しいときにnilを返した場合、これは空の配列に対しては不可能です。