わたなべです。 Norio Kobayashi <ncoba / par.odn.ne.jp> writes: > def nextgen > n = {} > @lives.each_key {|geom| # (1) > n[geom] ||= 0 > @neighbors[geom.y][geom.x].each {|pos| > n[geom+pos] ||= 0 > n[geom+pos] += 1 > } > } > n.each {|geom, count| > if count == 3 || @lives[geom] && count == 2 > @lives[geom] = true > else > @lives[geom] = nil # (2) > end > } > end > > (2) のところで、「生物が存在しない」として nil を代入していますが、 > (1) で全てのキーに対して、すなわち、生物が存在しない所(nil)も、 > 生物が存在するとして計算してしまっているので、これだとうまくいかないと > 思うのですが…。 その本が出たころのRubyはまだ1.4.xだったと思いますが、 1.4.xまではnilを代入することでキーを削除するという 仕様になってました。 % ruby-1.4.6 -ve 'h = {"a"=>1}; h["a"] = nil; p h' ruby 1.4.6 (2000-08-30) [i586-linux] {} % ruby-1.6.0 -ve 'h = {"a"=>1}; h["a"] = nil; p h' ruby 1.6.0 (2000-09-19) [i586-linux] {"a"=>nil} -- わたなべひろふみ