1

Rubyで並列代入演算子を勉強中です。これを使用して配列内の値を交換しようとしたところ、予期しない結果が得られました。これに対する答えをオンラインで見つけることができず、誰かがここで何が起こっているのかを明らかにできることを望んでいました.

最初の例:

array = [1,2,3]
=> [1, 2, 3]
array[0,1] = array[1,0] 
=> []
array
=> [2, 3] #thought this would be = [2,1,3]

array[0] はどこに行き、Ruby は値を交換しないのはなぜですか?

2 番目の例:

array = [1,2,3]
=> [1, 2, 3]
array[0,1] = [1,0]
=> [1, 0]
array
=> [1, 0, 2, 3] #was expecting [1,0,3]

なぜRubyは右辺を配列に挿入し、値を代入しなかったのですか?

4

2 に答える 2

5

構文は、 lengtharray[0,1]から始まる配列のスライスを選択しています。スライスが長いほど、それがより明確になります。01

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

最初の例で必要な方法を交換するには、両方のインデックスを個別に指定する必要があります。

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

2 番目の例では、Ruby はarray[0,1]スライスをに置き換え[1, 0]、効果的に最初の要素を削除し、新しい を挿入し[1, 0]ます。に変更するarray[0], array[1] = [1, 0]と、それも修正されます。

于 2015-07-10T16:10:38.650 に答える