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.call
在 log
中执行,您延迟了内部的执行。
我正在尝试 运行 此代码。我正在尝试将参数传递给内部过程,但我的代码没有因此 运行。我做错了什么?
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.call
在 log
中执行,您延迟了内部的执行。