2014-12-04 4 views
1

У меня есть этот модульвызов всех методов модуля

module Example 
    def self.test 
    p "test" 
    end 

    def self.test2 
    p "test2" 
    end 

    def self.test3 
    p "test3" 
    end 
end 

Теперь у меня есть метод, который просто должен вызывать все эти методы в модуле

def call_module_methods 
    #call all example methods 
end 

Так было бы назвать:

Example.test 
Example.test2 
Example.test3 

и выход будет:

"test" 
"test2" 
"test3" 

Как это возможно?

ответ

2

Да, it's possible:

def call_module_methods 
    Example.methods(false).each do |m| 
    Example.send m 
    end 
end 

Хитрость заключается в том, что вам нужно позвонить methods(false), чтобы получить только методы, определенные непосредственно на модуле.

+1

Излишне говорить, что любой метод, бросающий исключение, остановил цепь. Чтобы гарантировать, что вызываются все методы, не забудьте обработать исключения в блоке «каждый». – Humza