2013-10-04 2 views
-1

J'ai un ensemble de fonctions imbriquées qui prennent chacun une liste arbitraire d'arguments:passer une liste param splatted à une fonction imbriquée

def foo *args 
    bar args 
end 

def bar *args 
    baz args 
end 

def baz *args 
end 

Appel foo avec un ensemble de args comme :a => :foo, :b => :bar nous donne un ensemble d'éléments après le floc:

[{:a => :foo, :b => :bar}] 

et puis en passant que le long de la fonction imbriquée, et encore à travers un floc, fait pour cela:

[[{:a => :foo, :b => :bar}]] 

Est-il approprié de passer les arguments [0] à la fonction imbriquée, ou y a-t-il une sorte de splat inverse que je devrais utiliser à la place?

Répondre

1

Si vous voulez transmettre des arguments splatted à une autre fonction, il suffit de les splat à nouveau (l'opérateur se comporte à l'opposé, lorsqu'il est utilisé dans un appel de méthode (par rapport à la définition de la méthode))

def foo(*args) 
    bar *args 
end 
+0

Intéressant. Quel opérateur bizarre ... –

+0

@kid_drew: ruby ​​est plein de bizarreries. Tu t'y habitueras. :) –

+0

Quirky oui, mais il fait tellement de choses si bien. Je viens du monde PHP, donc je le creuse. –

Questions connexes