2011-01-17 6 views
1

Ich möchte der Klasse einige allgemeine Funktionen hinzufügen, die aus Instanzmethoden und Klassenmethoden bestehen. Ich habe versucht, dies wie unten zu tun, aber es hat nicht funktioniert. Was ist der richtige Weg, um dies zu erreichen?Wie umschließen Sie Instanz- und Klassenmethoden in Ruby?

module A 
    def foo 
    puts "foo!" 
    end 
end 

module B 
    def wow 
    puts "wow!" 
    end 
end 

module C 
    include A # instance methods 
    extend B # class methods 
end 

class D 
    include C 
end 

D.new.foo 
D.wow 

Antwort

6

Sie werden C wie folgt definieren, müssen in der Lage zu tun, was Sie wollen:

module C 
    include A 

    def self.included(base) 
    base.extend B #"base" here is "D" 
    end 

end 
+0

Dank! Was bedeutet "self" hier? Was ist, wenn ich es weglasse? –

+0

self macht eine "modul method" .. ähnlich einer "class method" Es funktioniert nicht, wenn Sie es entfernen. –

+0

@Misha Wenn Sie es weglassen, wird es brechen. 'def self.xxx' definiert eine Methode für die Klasse/das Modul selbst und nicht als eine Methode, die von Instanzen geerbt wird. – Phrogz

Verwandte Themen