Ruby
2026-02-26 14:58 Diff

Написать в Ruby функцию, которая принимает блок, не так страшно, как может показаться на первый взгляд. В самом простом случае нужно знать про одно ключевое слово – yield. Именно с его помощью происходит вызов блока:

Как видно из примера выше, мы не управляем блоком явно. yield автоматически получает доступ к блоку и вызывает его. Количество вызовов yield может быть любым. Каждый вызов работает, как независимый вызов блока:

yield можно воспринимать как вызов блока, который во многом ведет себя как обычная функция. Например, если блок возвращает результат, то его же вернет и yield.

Если блок содержит параметры, то они передаются в блок через yield, как через вызов функции:

И, собирая все вместе, так выглядит реализация map() внутри: