method_missing

Tags:

루비 메뉴얼 (http://www.ruby-doc.org/docs/ProgrammingRuby/)에 있는 예제입니다.

class Roman
    NUM_HASH = {
        "I" => 1,
        "II" => 2,
        "III" => 3,
        "IV" => 4,
        "V" => 5,
        "VI" => 6,
        "VII" => 7,
        "VIII" => 8,
        "IX" => 9,
        "X" => 10 }

    def to_number(str)
        NUM_HASH[str]
    end

    def method_missing(method_id)
        to_number(method_id.id2name)
    end
end

r = Roman.new
puts r.to_number("I")
puts r.IX
puts r.VII

이거 참 황당하게 대단하다는 말밖에는… r.IX나 r.VII는 메소드가 없으므로 Roman의 인스턴스 메소드인 method_missing을 찾게 되고, method_missing에서는 to_number에 메소드 이름을 넘겨주는 식으로 처리할 수 있습니다. 그래서 r.IX는 9, r.VII는 7을 각각 출력하게 되죠.

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *