a の replace 引数内でラムダを使用していgsub!
ます。ラムダが別のメソッドで定義されているRegexp.last_match
か$~
空である場合、呼び出し時に式を評価するラムダの予想される動作に反します。このコードを実行するとエラーが発生しますが、transcribe の最初の行のコメントを外すと動作します。
class Test
def initialize
@@replace = lambda { "#{callback('*', Regexp.last_match)}" }
end
def transcribe(s)
#@@replace = lambda { "#{callback('*', Regexp.last_match)}" }
s.gsub!( /(?<l>.?)[aeiou](?<r>.?)/ ) do
$~[:l] + (@@replace).call + $~[:r]
end
s
end
def callback( replace, match )
raise "Error: Match is empty" if match.nil?
return replace.upcase
end
end
t = Test.new
puts t.transcribe('example')
私が何か間違ったことをしているのか、それともバグなのか、誰か教えてもらえますか?
私はそれをグーグルで検索しました:ruby Regexp.last_match lambda、別の状況でバグがあるようですが、$1
これに関連するかどうかはわかりません。