{'a' => 'b'}.grep /a/
=> []
>> {'a' => 'b'}.grep /b/
=> []
它似乎与键或值不匹配。它做了我不能辨别的事情吗?
答案 0 :(得分:12)
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。