我想重寫一個命令,用不同的目錄中的相同文件替換輸出文件,建立一個翻譯地圖。在Perl我可以做這樣的事情:什麼是Ruby的等同於Perl的{} {} e?
s{(-o|--out)\s((?:\S+\/)?(\S+))}{ "$1 " . ($m{$2}="foo/$3") }eg
我不清楚怎麼辦紅寶石下是相同的,這是因爲:
"-out AAA -out yeah/BBB".
gsub(/((?:\s|^)-out)\s+((?:\S+\/)?(\S+))/) { |f|
"#{f[1]} #{m[f[2]] = "temp/#{f[3]}"}"
}
結果
"o temp/t- temp/u"
,因爲「M '是匹配的字符串,不是匹配對象,所以#{m[1]}
只是匹配字符串的第二個字符。
我不想使用$1
,$2
,因爲Rubocop說他們是邪惡的,我不想使用'Regexp.last_match',因爲它非常冗長,並且將這一行變成了一個do-塊。
有沒有內置的,給我的匹配對象作爲參數?
您可以使用帶有gsub的命名匹配,因此您不必依賴'$ 1'和'$ 2'。像其他任何塊參數一樣,將它們傳遞給塊。 – Mohamad