Существует ли метод ruby ​​или rails, который возвращает ключ хеша при проверке ключа хеша? - PullRequest
3 голосов
/ 02 апреля 2019

С учетом такого хэша:

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 ]

5 голосов
/ 03 апреля 2019

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
0 голосов
/ 02 апреля 2019

Я не думаю, что есть способ для этого, я просто обезьяна исправлю Hash класс

EDIT

@ Ответ Стефана должен быть принятым. presence_in в Rails - это исправление обезьяны классом Object (гораздо хуже, чем просто исправление обезьяны только классом Hash, но я думаю, что исправление обезьяны - это нормально для людей, которые отказались от голосования, если Rails делает это)

EDIT

Все знают (на самом деле они не знают, почему, но они где-то слышали), что исправление обезьян - плохая практика, но это явно лучше, чем делать 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...