是否有一个ruby或rails方法在检查哈希键时会返回哈希键?

时间:2019-04-02 19:16:14

标签: ruby-on-rails ruby

给出这样的哈希值:

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

我想找回钥匙,而不是布尔值。

很确定这不存在,但我想问一下。

2 个答案:

答案 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.firsthash[:some_long_key] ? :some_long_key : nil更好 >

class Hash
  def return_key_if_exists?(key)
    self.key?(key) ? key : nil
  end
end