Что значит grep на хэш? - PullRequest
       1

Что значит grep на хэш?

8 голосов
/ 16 сентября 2010
{'a' => 'b'}.grep /a/
=> []
>> {'a' => 'b'}.grep /b/
=> []

Кажется, он не соответствует ключам или значениям. Это делает что-то, что я не различаю?

1 Ответ

12 голосов
/ 16 сентября 2010

grep определено на Enumerable, то есть это общий метод, который ничего не знает о Hash es.Он работает на любых элементах Enumerable.Ruby не имеет типа для пар ключ-значение, он просто представляет Hash записей в виде двухэлементных массивов, где первый элемент является ключом, а второй элемент - значением.

grepиспользует метод === для фильтрации элементов.И поскольку ни

/a/ === ['a', 'b']

, ни

/b/ === ['a', 'b']

не являются истинными, вы всегда получаете пустой массив в качестве ответа.

Попробуйте это:

def (t = Object.new).===(other)
  true
end

{'a' => 'b'}.grep t
# => [['a', 'b']]

Здесь вы можете увидеть, как grep работает с Hash es.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...