ArgumentError appelant un Proc
-
07-07-2019 - |
Question
s = Proc.new {|x|x*2}
puts s.call(5)
-> 10
def foo(&a)
a.call(5)
end
puts "test foo:"
foo(s)
Lorsque j'essaie d'appeler le proc ci-dessus, je reçois:
foo: wrong number of arguments (1 for 0) (ArgumentError)
Je m'attendais à pouvoir passer un proc à une méthode si celle-ci est définie avec ce type de signature:
def foo(&a)
et ensuite je peux exécuter le processus insiide foo comme ceci:
a.call(5)
La solution
Si vous voulez passer un proc réel à foo, définissez-le simplement avec def foo (a)
. Placer & amp;
devant , un
signifie "ce n'est pas vraiment un argument. Au lieu de cela, prenez le bloc transmis à cette méthode, créez-en un processus et stockez-le dans la variable a ". En d’autres termes, avec votre définition actuelle, vous pouvez appeler foo comme ceci:
foo do |x|
puts x*2
end
Vous pouvez également utiliser & amp;
lorsque vous appelez une méthode pour transformer un proc en bloc:
foo(&s)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow