这很简单,因为我迷失了语言.
为什么会这样:
1.9.3-p194 :001 > h = Hash.new([])
=> {}
1.9.3-p194 :002 > h[:key1] << "Ruby"
=> ["Ruby"]
1.9.3-p194 :003 > h
=> {}
1.9.3-p194 :004 > h.keys
=> []
1.9.3-p194 :005 > h[:key1]
=> ["Ruby"]
Run Code Online (Sandbox Code Playgroud)
当您创建这样的哈希时:
h = Hash.new([])
Run Code Online (Sandbox Code Playgroud)
这意味着,每当使用尚未定义的密钥访问哈希时,它将返回:
[]
Run Code Online (Sandbox Code Playgroud)
现在你做的时候:
h[:key1] << "Ruby"
Run Code Online (Sandbox Code Playgroud)
h[:key1]已经返回[],"Ruby"被推送,导致["Ruby"]输出,因为这是返回的最后一个对象.当使用未定义的键访问'h'时,它也被设置为返回的默认值.因此,当你这样做时:
h[:key1] or h[:key2] or h[:whatever]
Run Code Online (Sandbox Code Playgroud)
你会得到
"Ruby"
Run Code Online (Sandbox Code Playgroud)
作为输出.希望这可以帮助.
| 归档时间: |
|
| 查看次数: |
261 次 |
| 最近记录: |