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
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
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.
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.