Ruby でクラスのメソッドをあとから拡張する
例えば、任意のファイルのパーサをあとから実装して追加したい場合に Ruby だとどういう風に書くのがいいかなーと考えてみた。
class ParserFile def parse name "Failed" end end module ParserCPP def parse name if name =~ /\.cpp$/ "C++ file" else super name end end end class ParserFile prepend ParserCPP end module ParserRuby def parse name if name =~ /\.rb$/ "Ruby file" else super name end end end class ParserFile prepend ParserRuby end parser = ParserFile.new p parser.parse "test.cpp" p parser.parse "test.rb" p parser.parse "test.vim"
こういう感じで Module#prepend
使うのがスマートかなぁ。