山ブログ

山間部

rbx-2.0.0-devでHash#updateが変な挙動する

#!/usr/bin/env ruby
require 'pp'

class Foo
  IUPAC_CODE = {
    :I => "Ile",
    :V => "Val",
    :L => "Leu",
    :F => "Phe",
    :C => "Cys",
    :M => "Met",
    :A => "Ala",
    :G => "Gly",
    :T => "Thr",
    :W => "Trp",
    :S => "Ser",
    :Y => "Tyr",
    :P => "Pro",
    :H => "His",
    :E => "Glu",
    :Q => "Gln",
    :D => "Asp",
    :N => "Asn",
    :K => "Lys",
    :R => "Arg",
    :U => "Sec",
    :O => "Pyl",
    :B => "Asx",
    :Z => "Glx",
    :X => "Xaa"
  }

  def original_hash
    IUPAC_CODE
  end

  def update_hash
    IUPAC_CODE.update(IUPAC_CODE){|k, v| 0.0 }
  end
end

pp Foo.new.update_hash

こういうコードがあって、あるHashをupdateしてvalueを更新した別のHashを作る。

% rbenv shell 1.9.3-p194
% ruby rbx_hash_update.rb
{:I=>0.0,
 :V=>0.0,
 :L=>0.0,
 :F=>0.0,
 :C=>0.0,
 :M=>0.0,
 :A=>0.0,
 :G=>0.0,
 :T=>0.0,
 :W=>0.0,
 :S=>0.0,
 :Y=>0.0,
 :P=>0.0,
 :H=>0.0,
 :E=>0.0,
 :Q=>0.0,
 :D=>0.0,
 :N=>0.0,
 :K=>0.0,
 :R=>0.0,
 :U=>0.0,
 :O=>0.0,
 :B=>0.0,
 :Z=>0.0,
 :X=>0.0}

% rbenv shell rbx-2.0.0-dev
% ruby rbx_hash_update.rb
{:Y=>0.0,
 :Z=>0.0,
 :E=>0.0,
 :H=>0.0,
 :I=>"Ile",
 :G=>0.0,
 :Q=>"Gln",
 :F=>"Phe",
 :S=>0.0,
 :K=>"Lys",
 :T=>0.0,
 :U=>0.0,
 :P=>0.0,
 :D=>0.0,
 :X=>"Xaa",
 :L=>"Leu",
 :M=>"Met",
 :W=>0.0,
 :A=>0.0,
 :O=>"Pyl",
 :N=>0.0,
 :R=>"Arg",
 :B=>"Asx",
 :V=>0.0,
 :C=>0.0}
%

ちょっと調べた感じIssueは出ていないみたいだから出したいけど、もうちょっと調べる。