s = Proc.new {|x|x*2}
def one_arg(x)
puts yield(x)
end
one_arg(5, &s)
Comment est-ce que one_arg
connait &s
?Comment deux arguments peuvent-ils être passés à une méthode avec une signature à un argument?
s = Proc.new {|x|x*2}
def one_arg(x)
puts yield(x)
end
one_arg(5, &s)
Comment est-ce que one_arg
connait &s
?Comment deux arguments peuvent-ils être passés à une méthode avec une signature à un argument?
L'opérateur &
transforme le Proc en un bloc, il devient donc une méthode à un argument avec un bloc (qui est appelé avec yield
). Si vous aviez laissé le &
pour qu'il passe directement le Proc, vous auriez eu une erreur.
En faisant le &s
, vous dites one_arg
que vous souhaitez que votre Proc s
soit passé en bloc (veuillez me corriger si je me trompe). Une écriture équivalente serait
one_arg(5) do |x|
x *2
end
Il y a eu quelques questions ici sur SO à la fin de cette affaire. August Lilleaas a un joli write up sur certaines des subtilités de toute cette folie Ruby.