Что это означает, добавляя префикс & к необработанному объекту proc (не к лямбде) в Ruby? - PullRequest
0 голосов
/ 03 декабря 2018

Я использую Ruby 2.5 для тестирования.У меня есть следующий код.

p = proc {|e| puts e}

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

test &p

Вывод:

1

&b сделает переменную b перехваченной переданной в блоке.Но в демоверсии у меня нет блока.У меня есть необработанный объект proc (не лямбда).Кажется, &p преобразует объект proc обратно в блок, как я пишу test {|e| puts e}.Это туре?Что & здесь делает?

1 Ответ

0 голосов
/ 03 декабря 2018

Что здесь делает &?

Именно так, конвертировать proc в блок.

У меня нет блока.У меня есть необработанный объект proc (не лямбда)

Возможно, вы думаете, что это (proc и lambda) две совершенно разные сущности?Они не.Они почти одно и то же.

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

Конечно, то же самое относится и к оператору &.

...