gpt4 book ai didi

ruby - 将 Procs 变成 block 困惑

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

我知道我们在方法的参数前面使用 & 符号是为了避免使用 yield,如果它在其方式中找不到 block ,它会输出错误。

但是,我看到有时我们在调用方法时在参数前面使用 &,以便将 proc 转换回 block 。最终碰巧有 2 个符号,一个用于将方 block 变成 proc,第二个用于相反。

怎么样?我们什么时候需要放置符号来从 proc 取回一个 block ,为什么?

我希望我已经说清楚了,因为不是英语母语会让我很难提出困难的问题。

例子

我从 CodeSchool 的幻灯片中获取了这个示例,可以在 http://courseware.codeschool.com/ruby_bits_2/ruby_bits_2_level_1.pdf 上找到它.

class Timeline
attr_accessor :tweets
def each(&block)
tweets.each(&block)
end
end

最佳答案

I understand that we use the ampersand in front of the method's argument in order to avoid using yield, which would output an error if it doesn't find a block in its way.

你的理解是错误的。

您使用 &block 作为将 block 捕获到 Proc 中的最后一个参数,特别是存储它并在以后使用它。当调用一个方法时,&block 做相反的事情,即指定该 block 对应于给定的 block 。这与 def foo(*args)foo(*args) 相同。

你举的例子基本上等同于:

def each
tweets.each{|t| yield y}
end

正如 Yehuda Katz 在 this talk 末尾解释的那样,您应该将“ block ”视为具有特殊参数位置和专用语法来指定它的 Proc

关于ruby - 将 Procs 变成 block 困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15980214/

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