2011-06-08 3 views
2

Veuillez expliquer pourquoi self est utilisé dans def self.included (klass) ci-dessous.Modules en Ruby

module A 
    def self.included(klass) 
    puts "A -> #{klass}" 
    puts A 
    puts self 
    end 
end 

class X 
    include A 
end 

Répondre

4

En écrivant def self.included vous définissez une méthode qui fait partie de la classe singleton du module A. En général, les méthodes singleton ne peuvent être appelés en faisant A.included() mais cette méthode singleton a un nom spécial included qui provoque l'interpréteur Ruby à appel lorsque le module est inclus dans une classe.

Une méthode normale dans un module (définie avec def foo) ne peut être appelée que si le module est inclus dans autre chose.

1

Voici comment vous déclarez une méthode de module qui peut être appelé directement. Normalement, les méthodes définies dans un module ne sont utilisables que si une autre classe ou un autre module les inclut, comme la classe X dans cet exemple.

module Example 
    def self.can_be_called 
    true 
    end 

    def must_be_included 
    true 
    end 
end 

Dans ce cas, vous verrez ces résultats:

Example.can_be_called 
# => true 

Example.must_be_included 
# => NoMethodError: undefined method `must_be_included' for Example:Module 

Les méthodes self déclarées ne sont pas fusionnées pour les classes ou les modules qui comprennent, cependant. Ils sont spéciaux de cette façon.

Questions connexes