["foo", "bar", "baz", "quax"].each do |some_word|
["fish","jones"].grep(/some_word/)
end
是不正確的。 some_word
爲參數來將擋,但/some_word/
是一個正則表達式的字符串'some_word'
匹配,無論是整個字符串或只是一個子串:
%w[some_word not_some_word_anymore].grep(/some_word/)
# => ["some_word", "not_some_word_anymore"]
如果你想使用的變量/參數some_word
在正則表達式中,你必須以某種方式替換它。一個簡單的方法來做到這一點是:
/#{ some_word }/
或:
Regexp.new(some_word)
例如:
foo = 'some_word'
/#{ foo }/ # => /some_word/
Regexp.new(foo) # => /some_word/
原因:
["foo", "bar", "baz", "quax"].each do |some_word|
end
返回相同的陣列,是這就是each
的行爲ES。我們通常不關心。如果你想變換數組,然後使用map
:
["foo", "bar", "baz", "quax"].map { |some_word| some_word.size }
# => [3, 3, 3, 4]
如果你想減少陣列中使用類似grep
或select
或reject
:
["foo", "bar", "baz", "quax"].reject { |some_word| some_word['oo'] }
# => ["bar", "baz", "quax"]
["foo", "bar", "baz", "quax"].select { |some_word| some_word['oo'] }
# => ["foo"]
那麼,呃..你在哪裏傳遞一個塊到grep? –
塊變量我的意思是'some_word' – tawheed