Je suis récemment tombé (par hasard, pour changer...) sur une classe de Ruby pour le moins rare : Struct. Basiquement, il s'agit d'une classe permettant d'implémenter rapidement des conteneurs simples, et fixés. Par rapport à un Hash, il n'est possible que de passer des symboles comme clefs, et il n'est pas permis d'ajouter de nouvelles clefs après déclaration. Struct possède également moins de méthodes que Hash, mais conserve les plus importantes (celles héritées d'Enumerable).
J'avoue être assez surpris par l'existence de cette classe. D'une part, parce que je ne l'ai rencontrée dans aucun code Ruby. Jamais. Ensuite parce qu'elle semble assez peu intéressante par rapport à un hachage (hormis pour l'aspect "déclaré" et "fixé" de ses clefs). Enfin, parce qu'elle n'apporte pas à priori de meilleures performances qu'un hachage (car elle est implémentée avec... eh voui...).
Deux liens sur cette classe :
J'avoue être assez surpris par l'existence de cette classe. D'une part, parce que je ne l'ai rencontrée dans aucun code Ruby. Jamais. Ensuite parce qu'elle semble assez peu intéressante par rapport à un hachage (hormis pour l'aspect "déclaré" et "fixé" de ses clefs). Enfin, parce qu'elle n'apporte pas à priori de meilleures performances qu'un hachage (car elle est implémentée avec... eh voui...).
Deux liens sur cette classe :
Enfin, encore un côté surprenant, les clefs d'une structure ne semblent pas en être des attributs...
Fiche = Struct.new(:nom, :prenom, :adresse, :phone)
# Exemple d'initialisation
roger = Fiche.new "Dupont", "Roger", \
"3 rue des Lilas, \
55555 Canardville", \
"0800555222"
p roger
#=> #struct Fiche nom="Dupont", prenom="Roger",
# adresse="3 rue des Lilas, 55555 Canardville",
# phone="0800555222">
chuck = Fiche.new
chuck.prenom = "Chuck"
puts chuck.prenom
#=> Chuck
class Fiche
def foo
puts @prenom
end
def bar
puts self.prenom
end
end
chuck.foo
#=> nil
chuck.bar
#=> Chuck
1 commentaires:
le hash, ça me fait penser non pas à une plante médicinale mais à un groupe de rock, surnommé "Moulu Haché", en fait "Molly Hatchett", ancêtre des groupes de métal.
le rapport avec le post?
ben, il n'y en a pas.
Enregistrer un commentaire