在 Ruby 中为原始 proc 对象(不是 lambda)加上前缀 & 是什么意思?

What does it mean by prefixing a & to a raw proc object (not lambda) in Ruby?

我正在使用 Ruby 2.5 进行测试。我有以下代码。

p = proc {|e| puts e}

def test &b
    b.call 1 if block_given?
end

test &p

输出为:

1

&b 将使变量 b 捕获传入的块。但是在演示中,我没有阻止。我拥有的是一个原始过程对象(不是 lambda)。似乎 &p 将 proc 对象转换回一个块,就像我写 test {|e| puts e} 一样。这是真的吗? & 在这里做什么?

What does & do here?

就是这样,将 proc 转换为块。

I don't have a block. What I have is a raw proc object (not lambda)

您是否认为这些(proc 和 lambda)是两个完全不同的实体?他们不是。它们几乎是一回事。

proc {} # => #<Proc:0x00007fe50882ecc8@-:1>
-> {} # => #<Proc:0x00007fe50882e840@-:2 (lambda)>

对于 & 运算符来说当然是一样的。