[ruby-list:41696] Re: Ruby本のlifegame

From: WATANABE Hirofumi <eban@...>
Date: 2005-12-11 05:40:07 UTC
List: ruby-list #41696
わたなべです。

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}

-- 
わたなべひろふみ

In This Thread