破壊的メソッドとメモリ


適当な配列aがあって、中の要素を取り出しほげほげする時。

a.each{|tmp|
 tmp.hoge()
}

while item = a.shift
  item.hoge()
end

前者のやり方だと配列aに変更は加えられない。後者の場合、shiftは破壊的メソッドとして作用するので、配列aは空になる。
この後に続くコードでaを参照することが無いのであれば、配列を解放して無駄なメモリを使っていないということで後者のやり方が効率的ということになるのかな?