Ruby 将进程转换为块混乱

Ruby 将进程转换为块混乱,ruby,Ruby,我知道我们在方法的参数前面使用了符号AND,以避免使用yield,如果它没有找到一个块,那么yield将输出一个错误 然而,我已经看到,有时我们在调用方法时使用argument前面的&来将proc转换回块。最终会出现两个符号,一个用于将块转换为过程,另一个用于相反的过程 怎么会这样?!我们什么时候需要用符号从进程中取回一个块,为什么 我希望我已经说清楚了,因为不是英语母语可能会让我很难提出困难的问题 范例 我从CodeSchool的幻灯片中选取了这个例子,可以在上找到 它们一起使用是很常见的。这

我知道我们在方法的参数前面使用了符号AND,以避免使用yield,如果它没有找到一个块,那么yield将输出一个错误

然而,我已经看到,有时我们在调用方法时使用argument前面的&来将proc转换回块。最终会出现两个符号,一个用于将块转换为过程,另一个用于相反的过程

怎么会这样?!我们什么时候需要用符号从进程中取回一个块,为什么

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

范例

我从CodeSchool的幻灯片中选取了这个例子,可以在上找到


它们一起使用是很常见的。这是因为块不能用作参数,而进程可以用作参数。因此,如果需要将块用作方法体中的参数,则必须将其转换为proc

在该方法中,您可能希望将proc传递给另一个只接受块的方法,因此必须再次进行转换

例如:

def each(&block) # block to proc
  posts.each(&block) # proc to block
end
我知道我们在方法的 参数,以避免使用yield,如果 它找不到阻碍它前进的障碍

你的理解是错误的

您可以使用
&block
作为最后一个参数,将块捕获到
过程中,尤其是存储它并在以后使用它。调用方法时,
&block
执行相反的操作,即指定块对应于给定的
。这与
def foo(*args)
foo(*args)
的想法相同

您给出的示例基本上相当于:

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

正如Yehuda Katz在结尾所解释的,您应该将“块”看作是一个
Proc
,它有一个特殊的参数位置和一个专用的语法来指定它。

显示一些代码。我不清楚你的意思。你能不能就你认为是的两种不同的情况发布两个简单的例子?对不起,我不是英语母语,而且很难用我自己的语言找到一些好的例子(顺便说一句,如果有人知道一个好的资源的话,这是意大利语),我不太确定第二步。这很好,我把程序块保存在进程中,这样我就可以在需要的时候使用它们,但是你能给我一个例子,说明什么时候我需要将程序块更改回进程块吗?
def each
   tweets.each{|t| yield y}
end