给出这样的哈希值:
hash = {some_long_key: 1}
我只想这样做:
hash[:some_long_key] ? :some_long_key : nil
但是如果可能的话使用一种方法...
hash.has_key? :some_long_key # like this
hash.check_key? :some_long_key # except return :some_long_key
我想找回钥匙,而不是布尔值。
很确定这不存在,但我想问一下。
答案 0 :(得分:5)
Rails为此问题添加了presence_in
方法。如果参数中包含接收者(通过include?
),则返回接收者,否则返回nil
:
hash = {some_long_key: 1}
:some_long_key.presence_in(hash)
#=> :some_long_key
:some_other_key.presence_in(hash)
#=> nil
答案 1 :(得分:-3)
我不认为有解决方法,我只是猴子修补Hash
类
编辑
@Stefan的答案应该是被接受的。
Rails的presence_in
猴子修补了Object类(比仅猴子的Hash
类修补猴子的方式差,但是我猜想,如果Rails这样做的话,猴子修补对于那些投反对票的人来说还可以)
编辑
每个人都知道(他们实际上不知道为什么,但是他们在某个地方听到了)猴子修补是一种不好的做法,但是比在整个地方做hash.slice(:some_long_key_not_in_hash).keys.first
或hash[:some_long_key] ? :some_long_key : nil
更好 >
class Hash
def return_key_if_exists?(key)
self.key?(key) ? key : nil
end
end