/ / Expliquer les hashes en Ruby - ruby-on-rails, ruby

Explications sur le hachage en rubis - rubis sur rails, rubis

Je lis un livre Crafting Rails Applications parJose Valim et je suis tombé sur quelque chose que je ne comprends pas. Je me demande si quelqu'un peut expliquer la différence en anglais simple entre les trois types de hachage ci-dessous.

  1. Par exemple, de quelle manière le hachage imbriqué (tel qu'il est représenté dans cet exemple) est-il un hachage imbriqué. Dans d’autres contextes, je comprends les hachages imbriqués, mais je ne les ai pas compris ici.

  2. En quoi un "tableau" est-il une "clé" dans le deuxième exemple? Pour moi, cela ressemble à un tableau avec quatre variables.

  3. En quoi le troisième exemple est un hachage avec "hash as key".

    @cached [clé] [préfixe] [nom] [partiel]

    Hachage simple avec tableau comme clé

    @cached [[clé, préfixe, nom, partiel]]

    Hash simple avec hash comme clé

    @cached [: clé => clé,: préfixe => préfixe,: nom => nom,: partial => partiel]

Réponses:

6 pour la réponse № 1

Le hachage imbriqué est bien, un hachage imbriqué. L'exemple donné, @cached[key][prefix][name][partial], vous montre le "chemin" vers une valeur particulière, donc dans ce cas, le hachage pourrait ressembler à ceci:

@cache = {
key => {
prefix => {
name => {
partial => "value"
}
}
}
}

Pour le hachage simple avec un tableau en tant que clé, ils utilisent ce tableau à 4 éléments comme l'une des clés du hachage.

@cache = {
[key, prefix, name, partial] => "value",
another_key => "another value"
}

Pour le hachage simple avec hachage comme clé, ils utilisent ce hachage (notez que les {} "pour le hachage sont facultatifs, ce qui peut causer de la confusion) comme l'une des clés du hachage.

@cache = {
{:key => key, :prefix => prefix, :name => name, :partial => partial} => "value",
another_key => "another value"
}

J'espère que cela pourra aider!


2 pour la réponse № 2

Un hash simplement associé clé objets à valeur objets. Les clés et les valeurs peuvent être n'importe quoi.

Si un valeur objet est lui-même un hachage, vous pouvez l'appeler un "hachage imbriqué", car dans un certain sens, il est à l'intérieur du hachage principal.

Si un clé objet est un tableau, alors vous obtenez un "hachage avec tableau comme clé".

Si un clé objet est lui-même un hachage, alors vous obtenez un "hachage avec hash comme clé".

Voir la réponse de amfeng pour une bonne représentation visuelle de ces différents cas.

Vous devez connaître un peu la syntaxe Ruby pour identifier les différents cas lorsque vous les voyez.

Par exemple, pour comprendre @cached[[key, prefix, name, partial]] tu as besoin de savoir ça [key, prefix, name, partial] représente un tableau, donc ce que vous avez est comme @cached[array], ce qui signifie qu'un tableau est utilisé comme clé.

Quand tu vois quelque chose comme @cached[key][prefix] il faut savoir que cela équivaut à (@cached[key])[prefix] donc l'objet value (@cached[key]) est une sorte d'objet qui répond à la [] méthode. Dans ce cas, il s’agit d’un hachage imbriqué car l’auteur vous l’a dit, mais si vous ne connaissez pas ce contexte, il est alors possible que ce soit quelque chose d’autre.

Quand tu vois quelque chose comme @cached[:key => key, :prefix => prefix, :name => name, :partial => partial] vous devriez savoir l'équivalent de @cached[{:key => key, :prefix => prefix, :name => name, :partial => partial}], ce qui signifie que nous utilisons comme clé de hachage.