提问



我想检查会话哈希中是否存在用户密钥。我怎样才能做到这一点?


请注意,我不想检查密钥的值是否为零。我只想检查用户键是否存在。

最佳参考


Hashs key?方法告诉您是否存在给定的密钥。


session.key?("user")

其它参考1


虽然Hash#has_key?完成了工作,正如Matz在这里指出的那样,它已经被弃用了Hash#key?[17]


hash.key?(some_key)

其它参考2


在最新的Ruby版本中,Hash实例有一个key?方法:[18]


{a: 1}.key?(:a)
=> true


请务必使用符号键或字符串键,具体取决于哈希中的内容:


{'a' => 2}.key?(:a)
=> false

其它参考3


这是很晚但最好使用符号作为关键:


my_hash = {}
my_hash[:my_key] = 'value'

my_hash.has_key?("my_key")
 => false 
my_hash.has_key?("my_key".to_sym)
 => true 

my_hash2 = {}
my_hash2['my_key'] = 'value'

my_hash2.has_key?("my_key")
 => true 
my_hash2.has_key?("my_key".to_sym)
 => false 


但是当你将字符串作为键传递时创建哈希,那么它将在键中搜索字符串。


但是在创建哈希时,你将符号作为键传递给has_key?将使用符号搜索键。





如果您使用Rails,可以使用Hash#with_indifferent_access来避免这种情况; hash[:my_key]hash["my_key"]都指向相同的记录

其它参考4


您始终可以使用Hash#key?检查密钥是否存在于哈希中。


如果不是它会让你false


hash =  { one: 1, two:2 }

hash.key?(:one)
#=> true

hash.key?(:four)
#=> false