gpt4 book ai didi

ruby - 如何在方法之间传递 block ?

转载 作者:太空宇宙 更新时间:2023-11-03 17:55:08 24 4
gpt4 key购买 nike

我有两个方法,除了一个 block ,但是其中一个方法需要将它的 block 传递给另一个。

def one(&block)
two(block)
end

def two(&block)
block.call
end

在实际代码中,其他参数被传递,onetwo 的语法糖。

我希望能够用一个 block 同时调用 onetwo

one { } # => okay
two { } # => ArgumentError: wrong number of arguments (1 for 0)

我明白了为什么我得到了 ArgumentErrortwo 本身没有参数。我不太确定如何表达这一点,但 &block 指定 block 出现在传入的参数之后,因此出现错误。

ruby 1.9

最佳答案

您可以像这样将 &block 传递给您的第二个方法:

def one(&block)
two(&block)
end

def two(&block)
block.call
end

one { puts "Hello World" }
Hello World
#=> nil

更新

你也可以这样做

def one
two(&Proc.new)
end

def two(&block)
block.call
end

它将具有与上面相同的输出。请注意,如果没有给一个 block ,它会引发一个 ArgumentError: tried to create Proc object without a block 所以你必须通过调用 if 检查是否给出了 block block_given?

关于ruby - 如何在方法之间传递 block ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15683702/

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