您的问题的答案是:如果您坚持阻止,您将无法做到! Ruby 不支持每个方法有多个块。解决此问题的一种方法是将两个 proc 作为变量传递,如下所示:
def by_two(n,a, proc1=nil, proc2=nil)
if proc1 || proc2
proc1.yield n if proc1
puts proc2.yield a if proc2
else
puts "no procs"
end
end
proc1 = proc {|x| p x * 2}
proc2 = proc {|x| x + 100}
by_two(10, 300, proc1, proc2)
by_two(10, 300, proc1)
by_two(10, 300)
输出:
20
400
20
no procs
另一种可能是这样的:
NO_OP = proc {}
def by_two(n,a, proc1=NO_OP, proc2=NO_OP)
if proc1 == NO_OP && proc2 == NO_OP
puts "no procs"
else
proc1.yield n
proc2.yield a
end
end
proc1 = proc {|x| p x * 2}
proc2 = proc {|x| p x + 100}
by_two(10, 300, proc1, proc2)
by_two(10, 300, proc1)
by_two(10, 300)
输出相同。