Quelle est la différence entre le": key => “valeur” et " la clé: “valeur”` hash notations?
Quelle est la différence entre :key => "value"
(hashrocket) et key: "value"
(Ruby 1.9) notations?
Si non, alors je voudrais utiliser key: "value"
notation. Est-il un joyau qui m'aide à convertir à partir de :x =>
à x:
notations?
Vous devez vous connecter pour publier un commentaire.
Oui, il y a une différence. Ceux-ci sont légaux:
mais ce ne sont pas:
Vous pouvez également utiliser quelque chose comme une clé avec
=>
de sorte que vous pouvez le faire:mais vous ne pouvez pas faire ceci:
Le style JavaScript (
key: value
) n'est utile que si l'ensemble de vos clés de Hachage sont "simples" symboles (plus ou moins quelque chose qui correspond à/\A[a-z_]\w*\z/i
, autant que je sache, l'analyseur utilise son étiquette de modèle de ces touches).La
:$in
style symboles de montrer un peu juste lors de l'utilisation de MongoDB si vous finirez mélange de Hachage styles si vous utilisez MongoDB. Et, si vous travaillez déjà avec des touches spécifiques de Hachages (h[:k]
) plutôt que de simplement l'ensemble de hachages (h = { ... }
), vous devez encore utiliser le côlon-première de style pour les symboles; vous aurez aussi à utiliser le premier colon de style pour les symboles que vous utilisez à l'extérieur de Hachages. Je préfère être constant pour que je ne vous embêtez pas avec le style JavaScript à tous.Certains des problèmes avec le JavaScript de style ont été corrigés dans Ruby 2.2. Vous pouvez maintenant utiliser les citations, si vous avez des symboles qui ne sont pas valides des étiquettes, par exemple:
Mais vous avez encore besoin de la hashrocket si vos clés ne sont pas des symboles.
h = { 'a.b': 'c' }
est maintenant légal de Ruby 2.2.0. Voir bugs.ruby-lang.org/issues/4276h[:s] = 42
exemple se rapporte à cette question? À mon avis, de style JavaScript vs hashrocket style n'est pertinente que pour de hachage paire clé/valeur définition, et de ne pas aborder de hachage éléments clés. Par conséquent, lah[s:] = 42
exemple semble être trompeuse.h[:s] = 42
notation. Il n'y a pas d'autre option. C'est lorsque vous définissez des paires clé/valeur que vous avez obtenu les options de{ key: value }
de style JavaScript ou{ :key => value }
hashrocket style. Le scénario d'adressage ne semble pas être pertinente pour ce qui est de l'accent.key: "value"
est une fonctionnalité pratique de Ruby 1.9; aussi longtemps que vous savez que votre environnement de soutien, je ne vois pas de raison de ne pas l'utiliser. C'est juste beaucoup plus facile de taper un colon qu'une fusée, et je pense qu'il est beaucoup plus propre. Comme pour un bijou pour faire la conversion, probablement pas, mais il semble comme une expérience d'apprentissage idéale pour vous, si vous ne connaissez pas déjà la manipulation de fichiers et d'expressions régulières.La
key: value
JSON-style affectations sont une partie de la nouvelle Ruby 1.9 hachage de syntaxe, donc garder à l'esprit que cette syntaxe ne fonctionne pas avec les anciennes versions de Ruby. Aussi, les clés vont être les symboles. Si vous pouvez vivre avec ces deux contraintes, de nouvelles hachages de travail tout comme l'ancien hachages; il n'y a pas de raison (autre que le style, peut-être) pour les convertir.Ruby hash-clés affectés par hash-roquettes peut faciliter les chaînes pour les paires clé-valeur (e.g.
's' => x
) considérant que l'affectation des touches via symboles (par exemplekey: "value"
ou:key => "value"
) ne peut pas être attribué à cordes. Bien que de hachage-roquettes fournir de la liberté et de la fonctionnalité de hash-tables, spécifiquement permettant de chaînes que les touches, performances de l'application peut être plus lent que si le hash-tables étaient construites avec des symboles comme hachage-clés. Les ressources suivantes peuvent être en mesure de préciser les différences entre hashrockets et symboles:Faire
:key => value
est le même que le fait de fairekey: value
, et il est vraiment juste une commodité. Je n'ai pas vu d'autres langues qui utilisent le=>
, mais d'autres, comme Javascript utiliser lekey: value
dans leur Hachage de l'équivalent de types de données.Comme pour un bijou pour convertir la façon dont vous avez écrit votre hache, je voudrais simplement coller avec la façon dont vous le faites pour votre projet en cours.
*Notez qu'en utilisant
key: value
la clé sera un symbole, et pour accéder à la valeur stockée à cette clé dans unfoo
de hachage serait encorefoo[:key]
.=>
. Je suppose que Ruby, fortement inspiré par Perl, emprunté à la syntaxe de Perl 🙂