J'ai une question en deux parties
Meilleures pratiques
- J'ai un algorithme qui effectue une opération sur une structure de données en utilisant l'interface publique
- Il s'agit actuellement d'un module comportant de nombreuses méthodes statiques, toutes privées à l'exception d'une méthode d'interface publique.
- Il y a une variable d'instance qui doit être partagée entre toutes les méthodes.
Ce sont les options que je vois, laquelle est la meilleure ?
- Module avec des méthodes statiques ('module' en ruby)
- Classe avec des méthodes statiques
- Mixin pour l'inclure dans la structure de données
- Refactor sortir la partie de l'algorithme qui modifie cette structure de données (très petite) et en faire un mixin qui appelle les méthodes statiques du module de l'algorithme.
Partie technique
Y a-t-il un moyen de faire un Méthode Module privé ?
module Thing
def self.pub; puts "Public method"; end
private
def self.priv; puts "Private method"; end
end
El private
ne semble pas avoir d'effet. Je peux toujours appeler Thing.priv
sans problème.
5 votes
Pour votre information, il n'existe pas de méthode "statique" en ruby, ce sont des méthodes d'instance de classe.
36 votes
Un vieux commentaire, mais comme il a quatre votes positifs, je dois signaler qu'il n'existe pas de "méthode d'instance de classe". Le terme correct est "méthode de classe".
5 votes
private
n'affecte que les méthodes d'instance, pas les méthodes de classe. utilisezprivate_class_method
à la place :module Thing; def self.pub; end; private_class_method :pub; end
3 votes
@micapam Les méthodes d'instance de classe existent en Ruby, et elles sont différentes des méthodes de classe.