この記事はアピリッツの技術ブログ「DoRuby」から移行した記事です。情報が古い可能性がありますのでご注意ください。
よしだです。Rubyで破壊的メソッドを自作する方法がわからなくて調べたので紹介します。
■ 破壊的メソッドとは
Stringクラスのインスタンスメソッドなどで定義されている、インスタンス自身を変更するメソッドです。
たとえば文字列の末尾に含まれる改行を消したい場合、
irb> text = "テスト\n"
irb> text.chomp
#=> "テスト"
irb> text
#=> "テスト\n"
のように「chomp」メソッドを使って実現できます。このときインスタンスであるtext自体に変更はなく、「chomp」のあとにtextを呼び出すと改行がついたままであることが確認できます。
これに対して破壊的メソッド「chomp!」の場合は、
irb> text = "テスト\n"
irb> text.chomp!
#=> "テスト"
irb> text
#=> "テスト"
と、text自体に変更が加わっていることがわかります。
本稿では、このような破壊的メソッドを自分で定義する方法を紹介します。
■ 定義する
答えは簡単で、「replace」メソッドを利用することで可能です。
たとえば『文字列の末尾に「hoge」という文字列をくわえる』という破壊的メソッド「hoge!」を定義するには以下のように記述します。
class String
def hoge!
self.replace(self + "hoge")
end
end
たったこれだけです。
■ おわりに
今回はStringクラスを例にしましたが、「replace」メソッドはいろいろなクラスで利用できるようです。適当なクラスに適当な破壊的メソッドどんどん定義していくのも面白いかもしれません。