2009-09-16 61 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

相關問題