0
votes

hash.key (my_key) n'accède pas aux clés dans le hachage imbriqué dans Ruby

1- J'ai peu d'expérience dans Ruby et je viens de C / Python.

2- dans l'extrait suivant: xxx

table d'impression.Keys ( ligne 8), je peux voir les clés. Toutefois, si table.key (k) == true ne devient jamais réalité.

Qu'est-ce que je fais mal?


0 commentaires

3 Réponses :


2
votes

Il devrait être table.key? (k) au lieu de table.key (k)


0 commentaires

0
votes

Est-ce ce que vous recherchez, désolé je ne sais pas ce que k code> est et suppose est constitué de clé. Considérant ce hachage: xxx pré>

La méthode de la clé étant appelée sur un hachage cherche la valeur, plutôt que la clé: p> xxx pré> donc Si vous souhaitez trouver une valeur par clé, vous feriez: p> xxx pré>

de chaque sens, la méthode ne reviendra jamais vraie car ce n'est pas un booléen, il suffit de faire: P >

hash.has_key?(:a)
 => true 


1 commentaires

Oui, has_key aurait résolu le problème. J'ai découvert que clé? aussi. C'est un peu dérangeant que la même méthode clé est une méthode différente de conditionnelle. hash.key ("B") donne : a et hash.key (: a) donne vrai .



3
votes

en supposant que table est un hachage (que nous ne connaissons pas à coup sûr de votre code), table.key (k) renvoie la valeur / em> pour la clé k , si la clé existe dans votre hachage ou nil si cela ne le fait pas. Étant donné que les valeurs de votre hachage ne sont apparemment pas des valeurs booléennes, la comparaison avec true sera toujours false.

Si vous souhaitez simplement tester, si la clé existe, utilisez la méthode ? au lieu de clé : xxx

(comparaison explicite avec vrai pourrait être effectué dans ce cas, mais est redondant, donc je l'ai laissé dehors).

Si votre hachage a été construit pour utiliser la valeur standard pour sa valeur par défaut (c.-à-d. nil ), vous pouvez raccourcir cela pour xxx

la principale différence entre table.Key (k) et table [k] est que si k est manquant dans le hachage, le premier retourne toujours nul, tandis que cette dernière retourne la valeur par défaut de ce hachage particulier que vous avez fourni dans le constructeur.

voir ici pour plus de détails.


0 commentaires