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.