ArgumentError llamando a un Proc
-
07-07-2019 - |
Pregunta
s = Proc.new {|x|x*2}
puts s.call(5)
-> 10
def foo(&a)
a.call(5)
end
puts "test foo:"
foo(s)
Cuando intento llamar al proceso anterior, obtengo:
foo: wrong number of arguments (1 for 0) (ArgumentError)
Mi expectativa era que puedo pasar un proceso a un método si el método se define con este tipo de firma:
def foo(&a)
y luego puedo ejecutar el proc insiide foo así:
a.call(5)
Solución
Si desea pasar un proceso real a foo, simplemente defínalo con def foo (a)
. Poner el & amp;
delante de a
significa " esto no es realmente un argumento. En su lugar, tome el bloque pasado a este método, cree un proceso fuera de él y almacene ese proceso en la variable a " ;. En otras palabras, con su definición actual puede llamar a foo así:
foo do |x|
puts x*2
end
También puede usar & amp;
al llamar a un método para convertir un proceso en un bloque:
foo(&s)
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow