ruby -将需要函数参数的函数传递给函数

u5i3ibmn  于 2023-01-12  发布在  Ruby
关注(0)|答案(1)|浏览(217)
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

但我得到了一个错误:未给出区组(屈服)

fnx2tebb

fnx2tebb1#

这应该可以达到目的:

def do_whatever # func A receives func B
  params = { test: 1 }
  proc = Proc.new{ puts "an important exec #{params[:test]}"; next "important response" } # func C
  yield(proc)
end

do_whatever do |func_c|
  begin # func B
      resp = func_c.call
      puts resp
  rescue => e
      puts e
  end
end

当你在do_whatever中调用yield,它作为参数传递给do_whatever的块,并返回proc作为块的参数时,由于return在Procs中不起作用,你需要使用next

相关问题