2009-09-22 5 views
4
fruit = ["apple","red","banana","yellow"] 
=> ["apple", "red", "banana", "yellow"] 

Hash[*fruit]  
=> {"apple"=>"red", "banana"=>"yellow"} 

Faire un hachage à partir d'un tableau - comment cela fonctionne-t-il? Pourquoi le splat provoque-t-il une analyse soignée du tableau dans le hachage?

Ou, plus précisément, comment le Hash "sait" que "apple" est la clé et "red" est sa valeur correspondante?

Est-ce simplement parce qu'ils sont à des positions consécutives dans le réseau de fruits?

Est-il important que le splat soit utilisé ici? Est-ce qu'un hachage ne peut pas se définir d'une manière aussi directe sinon?

Répondre

9

Comme les documentation états:

Hash["a", 100, "b", 200]  #=> {"a"=>100, "b"=>200} 
Hash["a" => 100, "b" => 200] #=> {"a"=>100, "b"=>200} 
{ "a" => 100, "b" => 200 }  #=> {"a"=>100, "b"=>200} 

Vous ne pouvez pas passer d'un tableau à la méthode Hash[] documentation selon, donc le floc est juste une façon de exploser le tableau fruit et passer ses éléments comme d'habitude arguments à la méthode Hash[]. En effet, c'est une utilisation très courante de l'opérateur splat.

La chose cool est que si vous essayez de passer un nombre impair d'arguments pour vous Hash obtiendrez une exception ArgumentError:

fruit = ["apple","red","banana","yellow","orange"] 
#=> ["apple", "red", "banana", "yellow", "orange"] 
Hash[*fruit] #=> ArgumentError: odd number of arguments for Hash 
2

Regardez la méthode de classe publique [] en classe Hash. (Say, over here.) Il indique clairement qu'un nouveau Hash (instance) sera créé et peuplé avec les objets donnés.Cependant, ils se produisent par paires.L'opérateur splat développe essentiellement un tableau lorsqu'il est utilisé en tant que paramètre

Questions connexes