gpt4 book ai didi

ruby - 为什么我不能将 block 传递给 Ruby 中的 proc?

转载 作者:数据小太阳 更新时间:2023-10-29 07:22:33 24 4
gpt4 key购买 nike

为什么我不能这样做:

do_once = Proc.new { yield }do_once.call { puts 1 }

irb 抛出 LocalJumpError:没有给出 block (yield)

最佳答案

yield 适用于传递给包装方法上下文的 block 。在你的情况下,我假设它是 irb 依赖的方法(lib/ruby/2.0.0/irb/workspace.rb:86 evaluate,如果 caller 是任何事情)。

如果你将它包装在一个函数中它会起作用,因为你改变了方法上下文:

def do_stuff
do_once = Proc.new { yield }
do_once.call
end

do_stuff { puts 1 }

请注意上面的 do_once.call 没有 block :yield 适用于传递给 do_stuff 的 block ,而不是 block 传递给 do_once

或者,显式声明 block 以避免完全使用 yield:

do_once = Proc.new { |&block| block.call }
do_once.call { puts 1 }

关于ruby - 为什么我不能将 block 传递给 Ruby 中的 proc?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17353045/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com