Comment deux arguments peuvent-ils être passés à une méthode avec une signature à un argument?
-
07-07-2019 - |
Question
s = Proc.new {|x|x*2}
def one_arg(x)
puts yield(x)
end
one_arg(5, &s)
Comment one_arg
a-t-il connaissance de & amp; s
?
La solution
L'opérateur & amp;
transforme Proc en un bloc, ce qui en fait une méthode à un argument avec un bloc (appelé avec return
). Si vous aviez omis le & amp;
afin qu'il passe directement le Proc, vous auriez une erreur.
Autres conseils
En exécutant & amp; s
, vous indiquez à one_arg
que vous souhaitez que votre Proc s
soit transmis en tant que bloc ( Corrige moi si je me trompe). Une écriture équivalente serait
one_arg(5) do |x|
x *2
end
Il y a eu quelques questions sur SO récemment, qui traitent de cela. August Lilleaas a un très joli écrivez sur les subtilités de toute cette folie Ruby.
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow