0

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

p = proc {|e| puts e}

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

test &p

输出是:

1

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

4

1 回答 1

3

在这里做什么&

正是如此,将 proc 转换为块。

我没有块。我拥有的是一个原始 proc 对象(不是 lambda)

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

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

&就运营商而言,当然是同样的事情。

于 2018-12-03T20:13:43.057 回答