Dra*_*gon 8 ruby hash invisible
Ruby允许您为哈希定义默认值:
h=Hash.new(['alright'])
h['meh'] # => ["alright"]
Run Code Online (Sandbox Code Playgroud)
显示散列时会显示值的赋值,但修改后的默认值不会.在哪里'bad'?
h['good']=['fine','dandy']
h['bad'].push('unhappy')
h # => {"good"=>["fine", "dandy"]}
Run Code Online (Sandbox Code Playgroud)
'bad' 如果我们明确要求出现.
h['bad'] # => ["alright", "unhappy"]
Run Code Online (Sandbox Code Playgroud)
为什么在显示哈希时不会显示修改后的默认值?
mu *_*ort 11
哈希的默认值不会像您期望的那样工作.当你说h[k],这个过程是这样的:
k键,则返回其值.注意,(2)和(3)没有任何关于插入kHash的内容.默认值基本上变为h[k]:
h.has_key?(k) ? h[k] : the_default_value
Run Code Online (Sandbox Code Playgroud)
因此,只需访问一个不存在的密钥并获取默认值就不会将缺少的密钥添加到哈希中.
此外,任何形式:
Hash.new([ ... ])
# or
Hash.new({ ... })
Run Code Online (Sandbox Code Playgroud)
几乎总是一个错误,因为你将为所有默认值共享完全相同的默认数组或哈希值.例如,如果您这样做:
h = Hash.new(['a'])
h[:k].push('b')
Run Code Online (Sandbox Code Playgroud)
然后h[:i],h[:j]...将全部返回['a', 'b'],这很少是你想要的.
h = Hash.new { |h, k| h[k] = [ 'alright' ] }
Run Code Online (Sandbox Code Playgroud)
这将做两件事:
| 归档时间: |
|
| 查看次数: |
1636 次 |
| 最近记录: |