Comment puis-je récupérer plusieurs valeurs de hachage à la fois?
Qu'est ce qu'une version plus courte de cette?:
from = hash.fetch(:from)
to = hash.fetch(:to)
name = hash.fetch(:name)
# etc
Note le fetch
, je veux lever une erreur si la clé n'existe pas.
Il doit être plus courte version de celui-ci, comme:
from, to, name = hash.fetch(:from, :to, :name) # <-- imaginary won't work
C'est OK pour utilisons si nécessaire.
- L'un d'important et de non sollicité question est. À quoi voulez-vous de les réaffecter les valeurs de hachage à vars?
- Je ne peut pas analyser votre commentaire ci-dessus.
- Pourquoi voulez-vous faire
from = hash.fetch(:from); to = hash.fetch(:to);
... au lieu d'utiliserhash[:from]
? - C'est une question générale qui a trop différents cas d'utilisation de mentionner, tout comme il y a parfois une nécessité pour éviter l'échec silencieux en utilisant
fetch
au lieu de[]
, il y a parfois besoin de l'aide d'une extraction de la version devalues_at
.
Vous devez vous connecter pour publier un commentaire.
Utiliser Hachage du
values_at
méthode:Ce sera le retour de
nil
pour toutes les clés qui n'existent pas dans la table de hachage.fetch
trop.raise MyException if hsh_values.include? nil
Ruby 2.3 introduit finalement le
fetch_values
méthode pour les hachages carrément obtient ceci:Cela va générer une erreur, comme vous l'avez demandé
Ce sera le retour de la matrice.
Mais OP demandé à défaut sur une clé manquante...
nil
valeur.keys.to_a == [:from, :to, :name]
est incorrect. La commande sera question ici, mais les clés de Hachage ont pas d'ordre particulier devrait être d'au moinskeys.to_a - [:from, :to, :name] == []
. Dans l'ensemble, c'est juste plus d'efforts que ça vaut la peine.Vous pourriez initialiser votre hash avec une valeur par défaut de
KeyError
objet. Ceci renvoie une instance de KeyError si la clé que vous essayez d'extraire n'est pas présent. Tout ce que vous devez faire est de vérifier son (de la valeur) de la classe et de l'élever si ses un KeyError.Nous allons ajouter quelques données à ce hachage
Enfin regarder à l'valeurs et de déclencher une erreur si la clé ne trouve pas
Cela permettra de lever une exception si et seulement si la clé n'est pas présente. Il va pas se plaindre dans le cas où vous avez une clé avec
nil
valeur.La chose la plus simple que je voudrais aller serait
Alternativement, si vous souhaitez utiliser
values_at
, vous pouvez utiliser unHash
avec une valeur par défaut de bloc:Ou, si vous êtes si incliné, le singe-patch
Hash