Comment deux arguments peuvent-ils être passés à une méthode avec une signature à un argument?

StackOverflow https://stackoverflow.com/questions/1435400

  •  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 ?

Était-ce utile?

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
scroll top