備忘録

Rubyをやっててたびたびはまる罠

string = "hogehogefoobar"
string.gsub(/(hoge)*/, 'piyo')
puts string

ってやって、出力がもちろん

hogehogefoobar

なのに、「置換されてねえじゃん!」ってなること。なんの(Javaか?)影響かはわからんけど、メソッドを実行したら、そのオブジェクトの中身が変更されるという錯覚をよくするのだけど、Rubyの場合は変更が適応されたオブジェクトを返すだけなので、ちゃんとそれを受け取ってあげなければいけない。このままだと投げっぱなしで、会話のキャッチボールが成立しないよパパ!
よって

string = "hogehogefoobar"
string = string.gsub(/(hoge)*/, 'piyo')
puts string

とやればOK