RUBY-LANG.ORG/JPのコード

何気なくRubyオフィシャルサイトを見ていて、ふとあるコードが書いてあることに気づいた。短いコードなのだが、なかなか面白い、というか、一部分知らないStringメソッドが使われてたので、ちょっと調べてみた。

上記サイトに書かれているコードは次のようなもの。

# Output "I love Ruby"
say = "I love Ruby"
puts say
 
# Output "I *LOVE* RUBY"
say['love'] = "*love*"
puts say.upcase
 
# Output "I *love* Ruby"
# five times
5.times { puts say }

文字列(String)の部分文字列を[]で指定し、そこに文字列を代入すると文字列の置換が出来るようなのです。なるほどねー。
普通使うであろうメソッドでいうところの String#sub! に相当しているようで、String#gsub! 的には使えないみたい。

say = "I love Ruby, I have a glove."
say['love'] = '*love*'
puts say   #=> "I *love* Ruby, I have a glove"

say = "I love Ruby, I have a glove."
say.sub!('love', '*love*')
puts say   #=> "I *love* Ruby, I have a glove"

say = "I love Ruby, I have a glove."
say.gsub!('love', '*love*')
puts say   #=> "I *love* Ruby, I have a g*love*"