2009-09-16 67 views
0
s = Proc.new {|x|x*2} 
puts "proc:" + (s.call(5)).to_s 

def foo(&a) 
    a.call(5) 
end 
foo{|x| puts "foo:" + (x*3).to_s} 

運行這個程序產生的輸出:參數如何傳遞給特效?

proc:10 
foo:15 

如何從foo的塊值3得到傳遞給PROC? 我預計今年產量:因爲FOO定義爲

proc:10 
foo:10 

我們把proc總是調用作爲參數值5:

a.call(5) 

爲什麼在輸出FOO 15?

回答

4

值3不會被傳遞給PROC因爲你不及格sfoo。你大概的意思是寫

foo {|x| puts "foo: #{s.call(x)}"} 

puts "foo: #{foo(&s)}" 

此外,這些是等價的:

def foo_1(x, &a) 
    puts a.call(x) 
end 
def foo_2(x) 
    puts yield(x) 
end 

foo_1(5, &s) #=> 10 
foo_2(5, &s) #=> 10 
4

因爲該塊輸出x*3(而不是送返回x*2)和5*3爲15

+0

當我調用foo,會發生什麼a.call(5)?它被忽略?我認爲它會被調用,輸出將是10. – uzo 2009-09-16 20:01:40

+0

@uzo:'a'是塊'{| x |放入「foo:」+(x * 3).to_s}'。此塊將參數乘以3.所以,當您使用參數5調用它時,您會得到5 * 3,即15。 – Chuck 2009-09-16 20:25:56

+0

當然,它不會被忽略。 a用參數5調用。然後輸出5 * 3,這就是15. – sepp2k 2009-09-16 20:26:36