如何将参数传递给procs?

时间:2009-09-16 19:27:18

标签: ruby

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? 我预计此输出

proc:10
foo:10

始终使用值5作为参数调用proc,因为foo定义为:

    a.call(5)

为什么foo 15在输出中?

2 个答案:

答案 0 :(得分:4)

因为块输出x*3(而不是返回x*2的s)和5*3是15。

答案 1 :(得分:4)

值3未传递给proc,因为您没有将s传递给foo。你可能想写

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