2017-02-21 5 views
1

ich HTTParty benutze und auf der Grundlage der Dokumente können Sie eine Klasse erstellen:Wie funktioniert self.class.method beim Einbinden eines Moduls?

class SomeClass 
    include HTTParty 
    base_uri 'host' 
    def index 
     self.class.get('/path') 
    end 
end 

Ich bin nicht sicher, wie get Methode innerhalb des Moduls deklariert wird.

+1

Modul bietet die Klasse Singleton-Methoden, so erhalten Sie 'self.class.get' funktioniert –

+1

** tl; dr ** - [' included 'Hook] (https://github.com/jnunemaker/httparty /blob/master/lib/httparty.rb#L19-L26). – ndn

Antwort

2

Die get Methode bei line 484 of httparty/httparty.rb definiert ist

def get(path, options = {}, &block) 
    perform_request Net::HTTP::Get, path, options, &block 
end 

Dies wird auf einem Modul definiert ClassMethods genannt. Wenn Sie weiter oben die Datei httparty/httparty.rb suchen. Bei 20 Zeile sehen Sie:

def self.included(base) 
    base.extend ClassMethods 

Die method included wird aufgerufen, wenn ein Modul in ein anderes Modul oder Klasse enthalten ist.

Dieser Code stellt sicher, dass beim Einfügen des Moduls HTTParty in ein anderes Modul oder eine andere Klasse die in HTTParty::ClassMethods definierten Methoden auf das Hostobjekt erweitert (als Klassenmethoden hinzugefügt) werden. Sie werden Klassenmethoden.

Verwandte Themen