我有一个Ruby哈希,其属性如下:
{:type=>"article", :id=>"207", :infographic=>nil, :guest_post=>nil, :interview=>nil}
假设我想检查此哈希是否具有与变量“keyVar”相同的键
keyVar = ":type"
如果我hash.has_key?(keyVar)
,则返回false,但显然确实有密钥。
我做错了什么?
答案 0 :(得分:1)
有很多方法可以检查
> hash = {:type=>"article",
:id=>"207",
:infographic=>nil,
:guest_post=>nil,
:interview=>nil}
> hash.keys.include?(:type)
> true
> hash.has_key?(:type)
> true
> hash.key?(:type)
> true
等等....阅读documentation
答案 1 :(得分:0)
您的keyVar
变量是字符串,而不是符号。更糟糕的是,它是带有前缀冒号的字符串,因此将其转换为符号并不容易。
你想要的是
hash.has_key?(:type)
但你正在做的是:
hash.has_key?(":type")
使用":type".to_sym
的Simpy会让你:":type"
。你需要这样的东西:
hash.has_key?(keyVar.gsub(":", "").to_sym)
答案 2 :(得分:0)
您正在检查错误的密钥。这样做:
key_var = :type
hash.key?(key_var)
<小时/> 如果你碰巧有错误的钥匙:
key_var = ":type"
然后,将其转换为正确密钥的方法是:
key_var.delete(":").to_sym
所以
hash.has_key?(key_var.delete(":").to_sym)
会奏效。使用gsub
作为另一个答案表明没有意义,因为字符串中只有一个:
。 sub
更好,但为什么在使用delete
时可以使用它?