我是Ruby新手,遇到了一個我無法解決的問題。如何在Ruby中使用正則表達式匹配作爲散列索引?
我試圖使用gsub()
匹配字符串中的模式,然後使用該匹配作爲散列的索引。到目前爲止,我還沒有弄明白。下面是一些代碼:
farm = { "pig_num" => 5, "horse_num" => 2, "cow_num" => 4}
assessment = "There are 'pig_num' pigs on this farm"
assessment.gsub(/'(.+?)'/, '\1') # => "There are pig_num pigs on this farm"
assessment.gsub(/'(.+?)'/, farm) # => "There are pigs on this farm"
assessment.gsub(/'(.+?)'/, farm['\1']) # => TypeError: no implicit conversion of nil into String
assessment.gsub(/'(.+?)'/) { |key| farm[key] }
到gsub()
第一次調用顯示我匹配我想要的字符串。
第二個電話是嘗試使用在the Ruby documentation site找到的gsub(pattern, hash)
風味。
第三個調用嘗試引用使用匹配作爲索引的值。
第四種是我認爲可能使用lambda/proc/block的花式褲子。
我在做什麼錯?
Shishir ,你和Kei都工作過,但我給了你一個綠色檢查,因爲它很好,簡短而且令人困惑,就像Ruby一樣。 :) –
您可能希望使用'Regexp.union(farm.keys)'代替'/#{farm.keys.join('|')} /'。 –