Y a-t-il une différence entre :key => "value"
(hashrocket) etkey: "value"
(Ruby 1.9)?
Sinon, j'aimerais utiliser la key: "value"
notation. Y at - il un petit bijou qui me permet de convertir de :x =>
la x:
notation?
Oui, il y a une différence. Ceux-ci sont légaux:
h = { :$in => array }
h = { :'a.b' => 'c' }
h[:s] = 42
mais ce ne sont pas:
h = { $in: array }
h = { 'a.b': 'c' } # but this is okay in Ruby2.2+
h[s:] = 42
Vous pouvez également utiliser n'importe quoi comme clé avec =>
pour pouvoir le faire:
h = { C.new => 11 }
h = { 23 => 'pancakes house?' }
mais vous ne pouvez pas faire ça:
h = { C.new: 11 }
h = { 23: 'pancakes house?' }
Le style JavaScript ( key: value
) n'est utile que si toutes vos clés de hachage sont des symboles "simples" (plus ou moins quelque chose qui correspond /\A[a-z_]\w*\z/i
, AFAIK l'analyseur utilise son modèle d'étiquette pour ces clés).
Les :$in
symboles de style apparaissent un peu lors de l'utilisation de MongoDB, vous finirez donc par mélanger les styles de hachage si vous utilisez MongoDB. Et, si jamais vous travaillez avec des clés spécifiques de Hashes ( h[:k]
) plutôt que juste des hachages entiers ( h = { ... }
), vous devrez toujours utiliser le style deux-points pour les symboles; vous devrez également utiliser le style deux-points de début pour les symboles que vous utilisez en dehors des hachages. Je préfère être cohérent donc je ne me soucie pas du tout du style JavaScript.
Certains des problèmes avec le style JavaScript ont été corrigés dans Ruby 2.2. Vous pouvez désormais utiliser des guillemets si vous avez des symboles qui ne sont pas des libellés valides, par exemple:
h = { 'where is': 'pancakes house?', '$set': { a: 11 } }
Mais vous avez toujours besoin du hashrocket si vos clés ne sont pas des symboles.
h = { 'a.b': 'c' }
est maintenant légal à partir de Ruby 2.2.0. Voir bugs.ruby-lang.org/issues/4276h[:s] = 42
exemple se rapporte à cette question? À mon avis, le style JavaScript par rapport au style hashrocket n'est pertinent que pour la définition de la paire clé / valeur de hachage, et non pour traiter les éléments de hachage par des clés. Par conséquent, l'h[s:] = 42
exemple semble trompeur.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 des options de{ key: value }
style JavaScript ou de{ :key => value }
style hashrocket. Le scénario d'adressage ne semble toujours pas pertinent pour ce qui est en jeu.key: "value"
est une fonctionnalité pratique de Ruby 1.9; tant que vous savez que votre environnement le supportera, je ne vois aucune raison de ne pas l'utiliser. Il est juste beaucoup plus facile de taper un colon qu'une fusée, et je pense que cela semble beaucoup plus propre. Quant à la possibilité de faire la conversion, probablement pas, mais cela semble être une expérience d'apprentissage idéale pour vous, si vous ne connaissez pas déjà la manipulation de fichiers et les expressions régulières.la source
Hachage clés Ruby attribuées par hachage roquettes peuvent faciliter les chaînes de paires de valeurs de clés ( par exemple .
's' => x
) Alors que l' affectation des touches par des symboles ( par exemplekey: "value"
, ou:key => "value"
) ne peut pas être attribué à des chaînes. Bien que les fusées de hachage fournissent la liberté et la fonctionnalité pour les tables de hachage, autorisant spécifiquement les chaînes comme clés , les performances de l'application peuvent être plus lentes que si les tables de hachage devaient être construites avec des symboles comme clés de hachage. Les ressources suivantes peuvent être en mesure de clarifier les différences entre les hashrockets et les symboles:la source
Les
key: value
affectations de style JSON font partie de la nouvelle syntaxe de hachage Ruby 1.9, gardez donc à l'esprit que cette syntaxe ne fonctionnera pas avec les anciennes versions de Ruby. De plus, les clés seront des symboles. Si vous pouvez vivre avec ces deux contraintes, les nouveaux hachages fonctionnent exactement comme les anciens hachages; il n'y a aucune raison (autre que le style, peut-être) de les convertir.la source
Faire
:key => value
est la même chose que fairekey: value
, et ce n'est vraiment qu'une commodité. Je n'ai pas vu d'autres langages qui utilisent le=>
, mais d'autres comme Javascript utilisent lekey: value
dans leurs types de données équivalents à Hash.En ce qui concerne un bijou pour convertir la façon dont vous avez écrit vos hachages, je m'en tiens simplement à la façon dont vous le faites pour votre projet actuel.
* Notez qu'en utilisant
key: value
la clé sera un symbole, et pour accéder à la valeur stockée à cette clé dans unfoo
hachage serait toujoursfoo[:key]
.la source
=>
. Je suppose que Ruby, fortement inspiré par Perl, a emprunté la syntaxe de Perl :)