浏览 2219 次
锁定老帖子 主题:注意Hash.new(obj)的使用误区
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-07-15
最后修改:2009-07-15
word_lines = Hash.new([]) 统计时直接使用 word_lines[word] << line 从表面逻辑上看,上面的使用似乎都没问题,程序也在执行得比较顺利 ......可是?...怎么回事,结果显然不对。调试吧,在统计时把word_lines/word/line/word_lines[word]通通p(显示)出来。 奇怪,不管什么时候,word_lines都是{}, 而word_lines[word]却还有值,而且不停的增长,甚至有大部分是重复的line值,但同一行我只赋了一次啊?!......发现了Ruby解释器的重大BUG!! 且慢,再看看fxri(我习惯开着fxri进行ruby编码,既可查,又可试)中对Hash.new的说明。 原来如此,说明得很清楚,“If obj is specified, this single object will be used for all default values.”,single object作为所有的缺省值。原来我一直都在对缺省值进行处理。同时我也找到了正确的使用方法 word_lines = Hash.new {|h, k| h[k] = []} 注意哦,如果你要的不是真正的缺省值而是初始值的话,应使用Hash.new{|h,k| block}而不是Hash.new(obj)。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |