ArgumentError chamar um Proc
-
07-07-2019 - |
Pergunta
s = Proc.new {|x|x*2}
puts s.call(5)
-> 10
def foo(&a)
a.call(5)
end
puts "test foo:"
foo(s)
Quando tento chamar a proc acima, eu recebo:
foo: wrong number of arguments (1 for 0) (ArgumentError)
A minha expectativa era de que eu posso passar um proc a um método se o método é definido com este tipo de assinatura:
def foo(&a)
e então eu posso executar o foo proc insiide assim:
a.call(5)
Solução
Se você quiser passar um proc real para foo, apenas defini-lo com def foo(a)
. Colocar o &
na frente dos meios a
"este não é realmente um argumento. Em vez levar o bloco passado para este método, crie um proc fora dele, e loja que proc na variável a". Em outras palavras, com sua definição atual, você pode chamar foo como esta:
foo do |x|
puts x*2
end
Você também pode usar &
ao chamar um método para transformar uma proc em um bloco:
foo(&s)
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow