Hash ruby

Par WilliamB17, il y a 9 ans


Bonjour,

On m'a donné un test Rspec et à partir de ce test je dois écrire une classe qui retourne un Hash.
Seulement là je suis étonné de la fin du test.
Si on admet un Hash comme suit:

object = { :name => 'John' , :lastname => 'Doe'}

et que la fin du test ressemble à ça :

expect(object).to be_an_instance_of(Hash) expect(object.name).not_to be_nil

On est bien d'accord qu'il n'est pas possible de faire

object.name

sur un Hash ?

PS: c'est pour un recrutement, j'ai le test qui est écrit et je dois implémenter la classe.

2 réponses

Grafikart, il y a 9 ans

Tu ne peux pas faire object.name car ton hash n'a pas de méthode name. Il faut faire object[:name]

WilliamB17, il y a 9 ans

Voici la solution que j'ai trouvé .

J'ai override Hash

class Hash def method_missing(m, *args, &block) self[m.to_sym] end end

Bien entendu je vous laisse le plaisir de gérer les erreurs si la clef n'exite pas, si la clef est une chaine de caratére ou un symbole, etc...