如果我执行以下操作:
h = Hash.new(Array.new)
h['a'].push('apple')
puts h['a']
puts h
Run Code Online (Sandbox Code Playgroud)
我得到以下输出:
apple
{}
Run Code Online (Sandbox Code Playgroud)
我不明白为什么把h输出不输出:
{"a"=>["apple"]}
Run Code Online (Sandbox Code Playgroud)
任何帮助非常感谢...
Aru*_*hit 13
读这个
如果
obj指定,则此单个对象将用于所有默认值.
Hash.new(Array.new)- 通过这一行,您创建了一个默认数组对象.每当您想要访问哈希中不存在的密钥时,将返回该密钥.
h['a'].push('apple')- 通过这一行,您实际上将值添加/推送到该默认数组对象,但不向哈希添加任何键.h['a']正在返回你定义的数组Array.new,就是你正在调用的Array#push那个,就是all.这h['a']就是给你那个默认数组的当前内容.puts hofcourse会给你{},因为你没有将键添加'a'到哈希.
看到同样的行动:
h = Hash.new(Array.new)
h.default # => []
h['a'].push('apple')
h.default # => ["apple"]
Run Code Online (Sandbox Code Playgroud)
现在再看一下代码:
#adding a key
h['a'] = 'Bob'
h['a'] # => "Bob"
h # => {"a"=>"Bob"}
#again default vaule as you are trying to aceess a non-exist key
h['b'] # => ["apple"]
Run Code Online (Sandbox Code Playgroud)
值得一读 Hash#[]
元素引用 - 检索与键对象对应的值对象.如果未找到,则返回默认值(
Hash::new有关详细信息,请参阅).
| 归档时间: |
|
| 查看次数: |
96 次 |
| 最近记录: |