def do_whatever # func A receives func B
params = { test: 1 }
proc = Proc.new{ puts "an important exec #{params[:test]}"; return "important response" } # func C
yield(proc)
end
do_whatever do
begin # func B
resp = yield # executes func C
puts resp
rescue => e
puts e
end
end
嗨,我想给一个函数(例如func A)传递一个函数块(例如func B)并执行它。这个函数块(例如func B)也接收一个在这个函数中初始化的函数块(例如func C)。在上面的代码中,我希望看到输出:
an important exec 1
important response
但我得到了一个错误:未给出区组(屈服)
1条答案
按热度按时间fnx2tebb1#
这应该可以达到目的:
当你在
do_whatever
中调用yield,它作为参数传递给do_whatever
的块,并返回proc作为块的参数时,由于return在Procs中不起作用,你需要使用next
。