在 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)>
对于 &
运算符来说当然是一样的。
我正在使用 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)>
对于 &
运算符来说当然是一样的。