あ伊藤です。 > |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