新手问题 rubykoans 题目中错误的题目,供大家参考。

hmilym · 2013年11月21日 · 最后由 zgm 回复于 2013年11月22日 · 2340 次阅读

话所 rubykoans 真是不错的锻炼 ruby 基础的习题集,下面是我在做 koans 的过程中出现的问题,请问这是什么原理?

hash = Hash.new([])
hash[:one] << "uno"
hash[:two] << "dos"
assert_equal ["uno", "dos"], hash[:one] 
assert_equal ["uno", "dos"], hash[:two] 
assert_equal ["uno", "dos"], hash[:three] 

那个 Hash.new([]) 里的 [] 相当于是 hash 的默认值,就是在用 hash[xx] 的方法取数据但不存在该 key 时返回的默认值,如果用 hash = Hash.new, 相当于 hash = Hash.new(nil),所以一般的声明方法在取非预期值时会返回 nil

哦 发现了 原来每次传入的默认值 Hash 在用之前是不会拷贝一份的啊 所以会反复对传入的[]插入元素

Hash.new(|h, k| h[k] = []) 这样就好了

学到了。

需要 登录 后方可回复, 如果你还没有账号请 注册新账号