Является ли метод ruby ​​Enumerable.Inject замыканием или просто блоком? - PullRequest
0 голосов
/ 09 мая 2011

Я пытался понять, нужно ли вам создавать процесс или лямбду, прежде чем что-то будет закрытием в Ruby или нет.

В качестве канонического примера мы можем взглянуть на метод ввода. Используется ключевое слово yield, но это закрытие или просто блок?

def inject(init)
  result = init
  each do |item|
    result = yield(result, item)
  end
  result
end

1 Ответ

2 голосов
/ 09 мая 2011

Кусок кода является замыканием, если он захватывает охватывающую область, что делает блок, поэтому блоки (а также лямбды и процы) являются замыканиями.

Методы, определенные с использованием def, однако, donне закрывайте ничего, поэтому inject не является закрытием.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...