2009-09-16 56 views
0
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) 
+0

随着“高清富(一)“你也可以”给(5)“块。 – 2009-09-16 20:12:04

回答

7

如果您想将实际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

相关问题