루비 메뉴얼 (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을 각각 출력하게 되죠.
Leave a Reply