2012-08-27 10 views
8

ich ein Modul Vehicle wie solcheWie privat Singleton-Methoden

module Vehicle 
    class <<self 
    def build 
    end 

    private 

    def background 
    end 
    end 
end 

Ein Aufruf Vehicle.singleton_methods kehrt [:build] definiert haben zu finden.

Wie kann ich alle privaten Singleton-Methoden überprüfen, die von Vehicle definiert sind?

Antwort

8

In Ruby 1.9+, können Sie einfach tun:

Vehicle.singleton_class.private_instance_methods(false) 
#=> [:background] 

In Ruby 1.8, die Dinge ein wenig komplizierter sind.

Vehicle.private_methods 
#=> [:background, :included, :extended, :method_added, :method_removed, ...] 

wird alle privaten Methoden zurückgeben. Sie können die meisten von denen außerhalb erklärt filtern, indem

Vehicle.private_methods - Module.private_methods 
#=> [:background, :append_features, :extend_object, :module_function] 

zu tun, sondern dass alle von ihnen aus nicht bekommen ganz, müssen Sie ein Modul erstellen zu tun, dass

Vehicle.private_methods - Module.new.private_methods 
#=> [:background] 

Dieses letzte hat die unglückliche Voraussetzung, ein Modul zu kreieren, nur um es wegzuwerfen.