gpt4 book ai didi

ruby - 我可以将一个本身需要一个 block 的 block 传递给 ruby​​ 中的 instance_exec 吗?

转载 作者:数据小太阳 更新时间:2023-10-29 06:54:18 26 4
gpt4 key购买 nike

我期待代码

foo=proc{puts "foo"}

instance_exec(1,2,3,&foo) do |*args , &block|
puts *args
block.call
puts "bar"
end

输出

123foobar

但是报错

both block arg and actual block given

我可以将一个本身需要一个 block 的 block 传递给 ruby​​ 中的 instance_exec 吗?

最佳答案

&foo 尝试将 foo 作为 block 传递给 instance_exec,而您已经传递了一个显式 block 。省略与号发送 foo 就像任何其他参数一样(除了它是一个 Proc 实例)。所以,试试这个:

instance_exec(1,2,3,foo) do |*args, block|
puts *args
block.call
puts "bar"
end

这也意味着您可以执行以下操作:

bar = proc{ |*args, block|
puts *args
block.call
puts "bar"
}

instance_exec(1,2,3,foo,&bar)

得到相同的结果。

更多信息请访问 Difference between block and &block in Ruby

关于ruby - 我可以将一个本身需要一个 block 的 block 传递给 ruby​​ 中的 instance_exec 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15357046/

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