2013-03-26 3 views

Répondre

0

Si vous exécutez hash["name"+"xxx"] plusieurs fois dans une boucle, il peut être utile de retirer la clé de la boucle et de la transformer en symbole. C'est juste une chose de performance. Les symboles utilisent un seul emplacement en mémoire, mais les chaînes sont calculées chaque fois qu'elles sont créées.

+0

Pourquoi le downvote? – AGS

+0

Je voudrais savoir aussi –

+0

Ceci n'est pas une réponse à la question. Le cas de concaténation est juste un exemple que le PO a trouvé où l'utilisation d'une clé de chaîne peut (ou peut ne pas) être utile. Souligner que ce n'est pas utile dans ce cas particulier, c'est manquer le point de la question. La question est: Quand serait l'utilisation d'une clé de chaîne utile? Cette réponse discute d'une chose totalement hors de propos. – sawa

2

concaténation Même clé peut être converti facilement:

hash[ ("name" + "xxx").to_sym ] 

La réponse courte est que vous bénéficiez d'éviter l'utilisation de chaînes comme clés dans Ruby où les clés ne sont que des étiquettes sémantiques pour vous permettre de renvoyer les valeurs dans le code . Dans ce cas, il est clair que les symboles font ce travail plus efficacement (bien, comme indiqué plus haut, à condition que vous n'effectuiez pas beaucoup de conversions pour générer les étiquettes).

Lorsque vous analysez des données arbitraires, par ex. XMl ou JSON, alors les chaînes comme des clés pourraient être une façon plus naturelle d'exprimer la structure. Encore une fois, la quantité de temps de conversion des chaînes émises par un analyseur en étiquettes pourrait être un facteur.

0

Si vous avez un fichier .yaml qui ressemble à ceci:

- thing1: value1 
    thing2: value2 
    thing3: value3 
- thing1: value1 
    thing2: value2 
    thing3: value3 
- thing1: value1 
    thing2: value2 
    thing3: value3 

et vous chargez avec YAML::load_file('filename'), alors vous aurez besoin d'utiliser des chaînes pour les clés.

Cependant, si votre fichier YAML ressemble à ceci:

- :thing1: value1 
    :thing2: value2 
    :thing3: value3 
- :thing1: value1 
    :thing2: value2 
    :thing3: value3 
- :thing1: value1 
    :thing2: value2 
    :thing3: value3 

Ensuite, vous pouvez utiliser des symboles pour les touches. Symboles dans ce cas sont préférés pour le côté rubis, mais le yaml serait plus propre avec des cordes.

Questions connexes