ArgumentError استدعاء بروك
-
07-07-2019 - |
سؤال
s = Proc.new {|x|x*2}
puts s.call(5)
-> 10
def foo(&a)
a.call(5)
end
puts "test foo:"
foo(s)
وعندما أحاول استدعاء بروك أعلاه، أحصل على:
foo: wrong number of arguments (1 for 0) (ArgumentError)
كان وتوقعي أن أتمكن من تمرير بروك لطريقة إذا تم تعريف الأسلوب مع هذا النوع من التوقيع:
def foo(&a)
وبعد ذلك يمكن تنفيذ فو بروك insiide مثل هذا:
a.call(5)
المحلول
إذا كنت تريد تمرير بروك الفعلي لفو، مجرد تحديد ذلك مع def foo(a)
. وضع &
أمام a
يعني "هذه ليست في الواقع حجة. وبدلا من ذلك أخذ <م> كتلة م> تمريرها إلى هذا الأسلوب، إنشاء بروك للخروج منه، وتخزين تلك بروك في متغير و". وبعبارة أخرى مع تعريف الحالي يمكنك الاتصال فو مثل هذا:
foo do |x|
puts x*2
end
ويمكنك أيضا استخدام &
عند استدعاء أسلوب لتحويل بروك في كتلة:
foo(&s)
لا تنتمي إلى StackOverflow