読者です 読者をやめる 読者になる 読者になる

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 使うのがスマートかなぁ。