Ruby では、 Array#slice
andがandとArray#slice!
は異なる動作をする理由を理解できませんでした (1 つは新しい配列で結果を返し、もう 1 つは現在のオブジェクトで動作します)。Array#sort
Array#sort!
最初のもの (強打なし)ではsort
、現在の配列の並べ替えられたコピーを返し、現在の配列を並べ替えますsort!
。
slice
、指定された範囲の配列を返し、指定された範囲を現在のオブジェクトからslice!
削除します。
Array#slice!
現在のオブジェクトを指定された範囲の配列にするのではなく、このように動作する理由は何ですか?
例:
a = [0,1,2,3,4,5,6,7,8,9]
b = a.slice( 2,2 )
puts "slice:"
puts " a = " + a.inspect
puts " b = " + b.inspect
b = a.slice!(2,2)
puts "slice!:"
puts " a = " + a.inspect
puts " b = " + b.inspect
出力:
slice:
a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
b = [2, 3]
slice!:
a = [0, 1, 4, 5, 6, 7, 8, 9]
b = [2, 3]