引发ArgumentError调用一个Proc
问题描述:
s = Proc.new {|x|x*2}
puts s.call(5)
-> 10
def foo(&a)
a.call(5)
end
puts "test foo:"
foo(s)
当我尝试拨打以上PROC,我得到:引发ArgumentError调用一个Proc
foo: wrong number of arguments (1 for 0) (ArgumentError)
我的期望是,我可以通过一个进程的方法,如果该方法与此类型的定义签名:
def foo(&a)
,然后我可以执行PROC insiide FOO这样的:
a.call(5)
答
如果您想将实际proc传递给foo,只需使用def foo(a)
来定义它。在前面a
把&
的意思是“这是不实际的参数,而是采取块传递给此方法,创建一个进程内出来,并存储在变量a那PROC”。在与当前的定义换句话说,你可以调用foo这样的:
foo do |x|
puts x*2
end
你也可以调用一个方法把一个进程成块时使用&
:
foo(&s)
+0
+1“您也可以在拨打电话时使用&...” – 2009-09-16 20:10:25
随着“高清富(一)“你也可以”给(5)“块。 – 2009-09-16 20:12:04