¿Cómo se pueden pasar dos argumentos a un método con una firma de un argumento?
-
07-07-2019 - |
Pregunta
s = Proc.new {|x|x*2}
def one_arg(x)
puts yield(x)
end
one_arg(5, &s)
¿Cómo one_arg
sabe acerca de & amp; s
?
Solución
El operador & amp;
convierte el Proc en un bloque, por lo que se convierte en un método de un argumento con un bloque (que se llama con yield
). Si hubiera dejado el & amp;
para que pasara el Proc directamente, habría obtenido un error.
Otros consejos
Al hacer & amp; s
, le está diciendo a one_arg
que desea que su Proc s
se pase como un bloque (por favor corrígeme si me equivoco). Una escritura equivalente sería
one_arg(5) do |x|
x *2
end
Últimamente ha habido algunas preguntas aquí sobre SO que tratan sobre esto. August Lilleaas tiene un bonito escriba sobre algunas de las complejidades de toda esta locura de Ruby.
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow