根据定义,当键不存在时,ruby哈希值返回nil。但我需要使用自定义消息代替nil。所以我使用的是这样的东西:
val = h['key'].nil? ? "No element present" : h['key']
但这有一个严重的缺点。如果针对该键指定了nil,则在该情况下将返回“No elements present”。
有没有办法完美实现这一目标?
由于
答案 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
希望这会有所帮助:)