2009-04-22 11 views
1

Est-ce que ce qui suit est possible? Je continue à courir dans une liste de nombre impair pour Hashhachage comme argument def

def thores_hammer(bling) 
    hammer_bling = { bling } 
end 

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

Merci d'avance.

Répondre

3

La raison pour laquelle vous utilisez dans une erreur est que le Hash est implicitement créé lorsque la méthode thores_hammer est invoquée - donc quand vous { bling } vous créez un hachage avec une seule clé (qui est elle-même un hachage) et aucune valeur. Ainsi, l'erreur .

Tout ce que vous devez faire est 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} 
+0

Magic! Deux fois vous m'avez sauvé – rubynewbie

+1

Je pense que je vais passer plus de temps en IRB – rubynewbie

1

Essayez ceci:

def thores_hammer(bling) 
    hammer_bling = bling 
end 

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

Ce que vous pouvez être l'intention de le faire est de faire une copie du Hash qui pourrait se faire comme:

def thores_hammer(bling) 
    hammer_bling = bling.dup 
end 

Il Ce serait une bonne idée de faire une copie si vous avez l'intention d'utiliser le Hash pendant une longue période et n'êtes pas sûr si la modification de la copie de la méthode est une bonne idée car elle pourrait être utilisée dans d'autres endroits.

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