以下代码取自 RubyTapas 截屏视频,但对于我的经验而言,它的解释不够充分。像这样设置哈希
config = Hash.new do |h,k|
h[k] = Hash.new(&h.default_proc)
end
允许以下列方式设置和访问值
config[:production][:database][:adapter] = 'mysql'
puts config[:production][:database][:adapter] # => "mysql"
当我做
puts config.inspect
它揭示了一个嵌套的哈希。
{:production=>{:database=>{:adapter=>"mysql"}}}
但是,如果我修改代码(只是玩弄它)以删除 &h.default_proc
config = Hash.new do |h,k|
h[k] = Hash.new() #&h.default_proc removed from parameter
end
我收到这个错误
undefined method `[]=' for nil:NilClass (NoMethodError)
例如,当我这样做时,我不明白 Hash.new(&h.default_proc) 发生了什么
config[:production][:database][:adapter] = 'mysql'
puts config[:production][:database][:adapter] # => "mysql"
你能分解一下,详细解释这个块&hdefault_proc
在这种情况下是如何工作的。还请说明是否可以在调用 proc 时进行说明。为什么需要 proc 才能完成这项工作
config[:production][:database][:adapter] = 'mysql'
proc是如何被调用的?我认为您必须执行 proc.call 才能真正调用 proc。
提前致谢