あ伊藤です。

> |Hash::each のイテレータブロックの中で、パラメータとして渡された
> |キーを delete で削除すると、ruby が core dump します。
> |
> |$ cat test.rb
> |a = {"a"=>1,"b"=>2,"c"=>3}
> |a.each do |k,v|
> |  a.delete(k)
> |end
> 
> すんません.これは一種の仕様です.Array,Hashのイテレータの中
> での要素の削除は出来ません.更に言えば,一般的にCollection系
> のイテレータブロック内での要素の削除は保証されていないんです.

そうでしたか。なんか問題ありそうな操作だと思いつつ、
core dump するのでバグかなあ、と思っていました。

もともと、2つのハッシュがあって、片方にある要素をもう
片方から削除する、という処理だったので、結局

hash1 = { ... }
hash2 = { ... }

hash2.delete_if do |k,v|
  if hash1.key?(k) then
     処理
     TRUE
  else
     FALSE
  end
end

とすることにしました。

> # しかし,せめてcore dumpはしないようにしたいなあ.

よろしくお願いします。
--
aito