自定义消息,其中密钥不存在于散列中

时间:2011-01-31 12:02:21

标签: ruby hash

根据定义,当键不存在时,ruby哈希值返回nil。但我需要使用自定义消息代替nil。所以我使用的是这样的东西:

val = h['key'].nil? ? "No element present" : h['key']

但这有一个严重的缺点。如果针对该键指定了nil,则在该情况下将返回“No elements present”。

有没有办法完美实现这一目标?

由于

4 个答案:

答案 0 :(得分:3)

irb(main):001:0> h = Hash.new('No element present')
=> {}
irb(main):002:0> h[1]
=> "No element present"
irb(main):003:0> h[1] = nil
=> nil
irb(main):004:0> h[1]
=> nil
irb(main):005:0> h[2]
=> "No element present"

答案 1 :(得分:2)

您可以使用has_key?方法

val = h.has_key?('key') ? h['key'] : "No element present"

答案 2 :(得分:0)

val = h.has_key?("key") ? h['key'] : "No element present"

答案 3 :(得分:-2)

以这种方式初始化哈希:

> hash = Hash.new{|hash,key| hash[key] = "No element against #{key}"}
 => {}
> hash['a']
 => "No element against a" 
> hash['a'] = 123
 => 123 
> hash['a'] 
 => 123 
> hash['b'] = nil
 => nil 
> hash['b']
 => nil 

希望这会有所帮助:)