2016-11-15 5 views

ответ

5

Использование super:

module Bar 
    def method_missing(name, *args) 
    p 'Bar' if name =~ /bar/ 
    end 
end 

class Foo 
    include Bar 

    def method_missing(name, *args) 
    p 'Foo' if name =~ /foo/ 
    super # ⇐ HERE 
    end 
end 

a = Foo.new 
a.foofoo => "Foo" 
a.barbar => "Bar" 

Как отметил @ndn в комментариях, можно тщательно обрабатывать различные результаты. super может быть настроен для использования, если и только если Foo#method_missing реализация не удалась:

def method_missing(name, *args) 
    case name 
    when /foo/ then p 'Foo' 
    # ..... 
    else super # ⇐ HERE 
    end 
    end 
+0

@ndn на самом деле, но построение надежного 'случая-when' внутри' method_missing' является своим родом выходит за рамки этого вопроса. – mudasobwa

+1

@ndn Да, я, наконец, решил бросить уведомление в ответ. Благодарю. – mudasobwa