Comment faire le constructeur de la classe privée en Ruby?
class A
private
def initialize
puts "wtf?"
end
end
A.new #still works and calls initialize
et
class A
private
def self.new
super.new
end
end
ne fonctionne pas complètement
Quelle est donc la bonne façon? Je veux faire new
privé et de l'appeler via une méthode de fabrique.
- Je ne suis pas sûr de ce que vous voulez, c'est possible, mais même si c'était, en théorie, vous ne seriez pas en mesure d'appeler à partir d'une méthode de fabrique, car il serait privé. Êtes-vous essayer de créer un singleton? Ou de faire une inversion de modèle de contrôle?
Vous devez vous connecter pour publier un commentaire.
Essayez ceci:
Plus sur APIDock
private_class_method
,protected_class_method
, etpublic_class_method
sont les méthodes publiques!Le second morceau de code que vous avez essayé est presque droit. Le problème est
private
est opérationnel dans le contexte des méthodes d'instance au lieu de les méthodes de la classe.Pour obtenir
private
ouprivate :new
de travail, vous avez juste besoin de le forcer à être dans le contexte des méthodes de la classe comme ceci:Ou, si vous voulez vraiment redéfinir
new
et appelsuper
Au niveau de la classe de l'usine méthodes peuvent accéder au contenu privé
new
très bien, mais essaye d'instancier directement à l'aide denew
va échouer, carnew
est privé.De faire la lumière sur l'utilisation, ici, en est un exemple courant de la méthode de factorisation:
Ensuite l'utiliser comme
Comme prévu, l'erreur d'exécution se produit dans le cas de direct
new
utilisation: