每当我对Hash进行条件检查以查看某个键是否没有任何值时,它就会创建该键
x = Hash.new {|h,k| h[k] = []}
puts x
>>>>{}
if x[0] == []
puts "Ok"
end
>>>>Ok
puts x
>>>> {0=>[]}
如何防止这种情况?
答案 0 :(得分:1)
您可以使用has_key?
方法:
x = Hash.new { |h,k| h[k] = [] }
x.has_key?(0)
#=> false
x
#=> {}
说你可以改变你的状况:
puts "Ok" if x.has_key?(0) && x[0] == []
这意味着如果您知道该密钥存在,则只会检查x[0]
的值。
答案 1 :(得分:0)
x = Hash.new {|h,k| h[k] = []}
如果你像这样创建哈希,它每次都会设置一个新的默认对象。
例如:
x = Hash.new {|h,k| h[k] = 0}
x[0]
=> 0
x
=> {0=>0}
x = Hash.new {|h,k| h[k] = "a" }
=> {}
x[0]
=> "a"
x
=> {0=>"a"}
所以你应该知道你想要什么默认哈希值。