ruby中proc的参数

时间:2018-03-14 03:12:12

标签: ruby arguments proc

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

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)

1 个答案:

答案 0 :(得分:1)

当您在inner[1,2] proc中调用middle时,您实际上正在执行将返回值3的函数,那么log的参数将为{ {1}}并且由于3没有响应"inner", 3您的脚本失败。

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

call

您的代码无效的原因是您使用middle=Proc.new do |x| log("inner", -> { inner[1, 2] }) "check2" end 执行函数inner。您可以通过不同方式[].call.yield.()执行ruby中的块。正如您所看到的,您传递的是内部结果而不是proc本身。通过执行[]inner[1,2]内的调用包含在log中稍后执行的proc.call内,可以延迟内部执行。