当密钥不存在时,从Hash#[]返回self(而不是nil)

bou*_*uby 4 ruby hash

通常,当元素传递到没有匹配键的哈希时,哈希返回nil.

hsh = {1 => "one", 2 => "two"}
hsh[3] #=> nil
Run Code Online (Sandbox Code Playgroud)

我想形成一个哈希值,如果没有匹配则返回传递给它的值.

hsh[3] #=> 3
Run Code Online (Sandbox Code Playgroud)

我猜这个解决方案可能涉及某种lambda ......?

**现在我正在使用一个笨拙的解决方案,使用条件方法来防止不匹配的密钥被传递到哈希..

ASh*_*lly 8

如果您只想返回新值但不想添加它们:

 h = Hash.new { |_hash, key| key }
Run Code Online (Sandbox Code Playgroud)

要最初填充此哈希,您可以执行以下操作:

 h.merge( {1 => "one", 2 => "two"} )
Run Code Online (Sandbox Code Playgroud)

如果哈希已经创建*:

 h.default_­proc = proc do |_hash,key|
     key
 end

#h[3]
#=> 3
Run Code Online (Sandbox Code Playgroud)

*仅限于红宝石1.9及以上版本