2013-03-18 1 views
5

Lassen Sie uns offene Klasse Module und fügen Sie eine Methode zu:Klasse, Modul, ihre eigenclasses und Methodensuche

class Module 
    def foo 
    puts "phew" 
    end 
end 

ich diese Methode, indem Sie diese nennen kann,

Class.foo 

was verständlich ist weil Klasse ClassClass ist, deren Oberklasse Module ist. So kann es Instanzmethoden aufrufen, die in Module definiert sind.

relation between classes and modules

Nun wird das Verfahren bar unten definiert auf Module ‚s Eigenklasse:

class Module 
    def self.bar 
    puts "bar" 
    end 
end 

aber jetzt

Class.bar 

funktioniert auch.

Kann mir jemand erklären, wie Class Zugriff auf Methoden in Module 's Eigenklasse?


Ich denke, ich habe es jetzt. Das Nachschlagen funktioniert nicht so, wie ich es vorher erklärt habe. Wenn ich Class.foo tue, wird die Methode in Class 's Eigenklasse gesucht und dann ist es Superklasse, die Module' s Eigenklasse den ganzen Weg bis BasicObject 's Eigenklasse ist, an welchem ​​Punkt es sich selbst dreht (wie eine Schlange essen eigenen Schwanz) zu suchen für Methode in Class (wie Class ist die Oberklasse von BasicObject 's Eigenklasse) und dann zu seiner Superklasse Module, wo es die Methode findet.

Ähnlich, wenn ich Class.bar mache, wird Methode in Class 's Eigenklasse und dann in Module' s Eigenklasse, wo es es findet.

Wenn ich

class Class 
    def check 
    puts "class instance method" 
    end 
end 

und

class Module 
    def self.check  
    puts "modules eigenclass method"  
    end  
    def check  
    puts "module instance method" 
    end  
end 

Vermutung wot ist der Ausgang, wenn ich tun:

Class.check 

Das ist mein derzeitiges Verständnis: current understanding

+0

Verwandte Diskussion Ich fand hilfreich: https: // stackoverflow.com/questions/13269271/why-a-modules-singleton-methode-ist-nicht-sichtbar-in-downstream-eigenklassen-wo –

Antwort

0

Ich schrieb kürzlich eine hübsche extensive tutorial, einschließlich neuer Ruby 2.0 Verhalten.

Hinweis: Der in Ruby verwendete Begriff ist singleton_class, nicht eigenclass.

+0

Link bei dieser URL ist tot –

1

Es gibt eine ziemlich umfassende Übersicht über das Methoden-Lookup-Verhalten von Ruby, wenn Eigenklassen an this blog post by Andrea Singh beteiligt sind. Bemerkenswerterweise enthält der Abschnitt "Eigenklassen und Klassenvererbung" ganz am Ende ein nützliches Nachschlagediagramm, das Ihre Fragen beantworten sollte.

+0

Ist das aktuelle wie von Ruby 2.2? –

Verwandte Themen