(1..4).each {|i| mtch = %r((\w{#{i}})); puts "hoge".gsub(mtch, $1)}
TypeError: no implicit conversion of nil into String
な、なんでや!?
ブロックに入れてないときはちゃんと動いたのに!?
こんな時は公式情報をみます。
すると・・・
注意:
第 2 引数 replace に $1 を埋め込んでも意図した結果にはなりません。 この文字列が評価される時点ではまだ正規表現マッチが行われておらず、 $1 がセットされていないからです。
な、ナンダッテー!?
では早速、ブロックわたしをしてみましょう
(1..4).each {|i| mtch = %r((\w{#{i}})(\w*)); puts "hoge".gsub(mtch) {$1.upcase + $2 } } #>>Hoge #>>HOge #>>HOGe #>>HOGE
やったぜ