如何在同一方法中产生两个不同的块
示例代码:

def by_two(n,a)
    yield n
    yield a
end

proc1 = proc {|x| p x * 2}
proc2 = proc {|x| x + 100}

by_two(10, 300, &proc1, &proc2)

错误是这样的-
main.rb:7: syntax error, unexpected ',', expecting ')'
by_two(10, 300, &proc1, &proc2)

有什么地方出了问题吗?谢谢

最佳答案

块是将单个匿名过程传递给方法的轻量级方法。因此,根据定义,不能有两个块传递给一个方法。它不仅在语义上不可能,甚至在句法上也不可能。
不过,ruby确实支持Procs形式的一级过程,而且由于这些过程与任何其他对象一样都是对象,所以可以根据需要传递任意多个过程:

def by_two(n, a, proc1, proc2)
  proc1.(n)
  proc2.(a)
end

proc1 = proc {|x| p x * 2}
proc2 = proc {|x| x + 100}

by_two(10, 300, proc1, proc2)
# 20
# => 400

自从在Ruby1.9中引入lambda文本之后,Procs在语法上几乎和块一样轻量级,因此不再有太大的区别:
by_two(10, 300, -> x { p x * 2 }, -> x { x + 100 })
# 20
# => 400

08-19 05:55