2017-09-19 2 views

Répondre

3

Tout d'abord, cela ne fonctionne pas comme prévu:

sample = {} 
sample[:alpha], sample[:beta], sample[:gamma] = 0 

Cela se traduira par:

sample == { alpha: 0, beta: nil, gamma: nil } 

Pour obtenir le résultat désiré, vous pouvez utiliser à la place parallel assignment:

sample[:alpha], sample[:beta], sample[:gamma] = 0, 0, 0 

Ou, loop through the keys pour attribuer chacun séparément:

[:alpha, :beta, :gamma].each { |key| sample[key] = 0 } 

Ou, merge le hachage d'origine avec vos nouveaux attributs:

sample.merge!(alpha: 0, beta: 0, gamma: 0) 

Selon ce que vous essayez réellement de faire ici, vous pouvez envisager de donner à votre hachage un default value. Par exemple:

sample = Hash.new(0) 

puts sample[:alpha] # => 0 
sample[:beta] += 1 # Valid since this defaults to 0, not nil 

puts sample   # => {:beta=>1} 
+0

Puisque '0' est immuable, il est sûr d'utiliser' Hash.new (0) ' – Stefan

+0

Ah oui, j'ai oublié que c'est aussi valide. Merci @Stefan, j'ai mis à jour la réponse. –

1

Qu'en est celui-ci?

sample.merge!(alpha: 0, beta: 0, gamma: 0) 
0

Il n'y a rien comme la chose que vous avez décrite mais vous pouvez exécuter une boucle avec tous les et affecter la valeur. Réduit le nombre de frappes supplémentaires, et très facile de changer la matrice de touches.