我正在尝试运行此代码。我试图将参数传递给内部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)
答案 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
内,可以延迟内部执行。