¿Cómo se pueden pasar dos argumentos a un método con una firma de un argumento?

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

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

¿Fue útil?

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