gpt4 book ai didi

ruby - Ruby 书中的代码块

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

我在 Coppers 的书“Beginning Ruby”中找到了这个代码块示例。这应该是处理代码块的自定义方法的示例?

  def each_vowel(&code_block)
%w{a e i o u}.each { |vowel| code_block.call(vowel) }
end

each_vowel { |vowel| puts vowel }

我就是看不出这是怎么回事。他是否将一个代码块发送到另一个代码块?

只是感觉有些不对劲。我知道 each 从数组中获取特定项目,一次一个,并将其放入 vowel 变量中,但接下来会发生什么?

最佳答案

是的,你是对的,一个 block 正在另一个 block 中执行。 &code_block 是一种将 block 转换为可执行 proc 对象的特殊方法。在方法定义中,code_block 现在引用一个 proc 对象,当使用 call 方法执行时,该对象基本上运行与方法调用关联的 block 中的代码(在本例中为 { |vowel|放置元音

但这不是执行关联 block 的唯一方法。另一种非常常见的方法是使用 yield 关键字。一旦达到 yield 关键字,就会立即执行该 block 。

def each_vowel
%w{a e i o u}.each { |vowel| yield(vowel) }
end

each_vowel { |vowel| puts vowel }

注意,在这种情况下,没有必要在方法签名中使用&code_block。 Yield 始终可以访问关联的 block 。但是,如果您想以 proc 对象的形式访问该 block ,则需要在参数列表末尾指定类似 &code_block 的内容。

关于ruby - Ruby 书中的代码块,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27156752/

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