1 votes

hash comme argument de la défense

Est-il possible de faire ce qui suit ? Je me heurte toujours à une liste de numéros impairs pour le hachage.

def thores_hammer(bling)
  hammer_bling = { bling }
end

thores_hammer :rubys    => 5,
              :emeralds => 5,
              :souls    => 333

Merci à l'avance.

3voto

rampion Points 38697

La raison pour laquelle vous rencontrez une erreur est que l'option Hash est implicitement créé lorsque le thores_hammer méthode est invoquée - donc lorsque vous faites { bling } vous créez un hash avec une seule clé (qui est elle-même un hachage) et aucune valeur. D'où l'erreur erreur.

Il suffit de laisser tomber les accolades :

irb> def thores_hammer(bling)
       hammer_bling = bling
     end
#=> nil
irb> thores_hammer :rubys    => 5,
                   :emeralds => 5,
                   :souls    => 333
#=> {:rubys=>5, :emeralds=>5, :souls=>333}

2voto

tadman Points 70178

Vous avez peut-être l'intention de faire une copie du tableau de bord, ce qui peut se faire de la manière suivante :

def thores_hammer(bling)
  hammer_bling = bling.dup
end

Il peut être judicieux de faire une copie si vous avez l'intention d'utiliser le hachoir pendant une longue période et si vous n'êtes pas sûr qu'il soit judicieux de modifier la copie qui vous a été remise parce qu'elle pourrait être utilisée à d'autres endroits.

En outre, il existe plusieurs utilisations différentes des accolades dans Ruby, comme la déclaration de blocs.

1voto

Petros Points 4430

Essayez ça :

def thores_hammer(bling)
  hammer_bling = bling
end

thores_hammer Hash[:rubys => 5, :emeralds => 5, :souls => 333]

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X