防止对Hash进行条件检查以创建Key

时间:2015-05-22 04:48:44

标签: ruby

每当我对Hash进行条件检查以查看某个键是否没有任何值时,它就会创建该键

x = Hash.new {|h,k| h[k] = []}
puts x
>>>>{}


if x[0] == []
    puts "Ok"
end

>>>>Ok

puts x
>>>> {0=>[]}

如何防止这种情况?

2 个答案:

答案 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"}

所以你应该知道你想要什么默认哈希值。