ruby 中 proc 的参数

arguments for proc in ruby

我正在尝试 运行 此代码。我正在尝试将参数传递给内部过程,但我的代码没有因此 运行。我做错了什么?

def log (descriptionOfProc,proc)
  puts "I have started proc #{descriptionOfProc}"
  puts "#{descriptionOfProc} is finished, returning #{proc.call}"
end

inner=Proc.new do |x,y|
  x+y
end

middle=Proc.new do |x| 
  log("inner", inner[1, 2])
  "check2"
end

outer=Proc.new do |x| 
  log("middle", middle)
  "check3"
end

puts log("outer", outer)

当您在 middle proc 中调用 inner[1,2] 时,您实际上是在执行函数,该函数将 return 一个值 3 然后是 [=14= 的参数] 将是 "inner", 3 并且由于 3 不响应 call 您的脚本失败。

如果你想修复你的脚本,你的中间过程应该看起来像这样

middle=Proc.new do |x| 
  log("inner", -> { inner[1, 2] })
  "check2"
end

您的代码无法运行的原因是您正在使用 [] 执行函数 inner。您可以以不同的方式执行 ruby 中的块 .call.yield.()[]。如您所见,您传递的是 inner 的结果而不是 proc 本身。通过将对 inner[1,2] 的调用包装在另一个块中,稍后通过 proc.calllog 中执行,您延迟了内部的执行。