Ruby 将块变量传递给grep?

Ruby 将块变量传递给grep?,ruby,grep,Ruby,Grep,当我这样做时: ["bar","quax"].grep(/bar/) 输出为: => ["bar"] => [] => ["foo", "bar", "baz", "quax"] 如果我这样做: ["bar","quax"].grep(/fish/) 输出为: => ["bar"] => [] => ["foo", "bar", "baz", "quax"] 我决定更进一步,尝试将一个块传递给grep,但没有成功 ["foo", "bar",

当我这样做时:

["bar","quax"].grep(/bar/)
输出为:

=> ["bar"]
=> []
=> ["foo", "bar", "baz", "quax"]
如果我这样做:

["bar","quax"].grep(/fish/)
输出为:

=> ["bar"]
=> []
=> ["foo", "bar", "baz", "quax"]
我决定更进一步,尝试将一个块传递给grep,但没有成功

["foo", "bar", "baz", "quax"].each do |some_word|
   ["fish","jones"].grep(/some_word/)
end
输出为:

=> ["bar"]
=> []
=> ["foo", "bar", "baz", "quax"]
我很好奇为什么我的扩展不起作用,因为它看起来相当简单。或者,这样做仅仅是非法的吗?

每个都在迭代数组,但您没有修改它。所以它只是循环了几次,调用grep,实际上它什么都不做,从技术上来说,它返回的是一些东西,你只是没有用它做任何事情,然后返回原始数组

你需要用grep的返回值做一些事情,但我不清楚这应该是什么,我不明白你为什么要使用它们

此外,本例中的某个单词按字面意思理解为某个单词。应该像.grep/{some_word}一样插入正则表达式/

这是不对的。some_word是块的参数,但/some_word/是与字符串“some_word”匹配的正则表达式,无论该字符串是整个字符串还是一个子字符串:

%w[some_word not_some_word_anymore].grep(/some_word/)
# => ["some_word", "not_some_word_anymore"]
如果你想在正则表达式中使用变量/参数,你必须以某种方式替换它。一个简单的方法是:

/#{ some_word }/
或:

例如:

foo = 'some_word'
/#{ foo }/      # => /some_word/
Regexp.new(foo) # => /some_word/
原因是:

["foo", "bar", "baz", "quax"].each do |some_word|
end
返回相同的数组,这是每个数组的行为方式。我们通常不在乎。如果要变换该数组,请使用贴图:

如果您试图减少数组,请使用grep或select或reject之类的方法:


所以嗯。。你在哪里把块传给grep?块变量我是说一些单词