Что означают фигурные скобки в Ruby?

Фигурные скобки как блок, литерал Hash и часть интерполяции. Почему контекст важнее самого символа.

Короткий ответ

Что ответить на собеседовании

В Ruby фигурные скобки могут обозначать блок кода или литерал Hash. Внутри интерполируемой строки конструкция #{...} вычисляет выражение. Блок {...} не равен хешу: смысл определяется синтаксическим контекстом. У блочной записи {...} приоритет выше, чем у do...end, поэтому механическая замена может изменить привязку блока к методу.

Подробный разбор

Ответ с пояснениями

Основные значения {} определяются контекстом.

Блок, передаваемый методу:

numbers = [1, 2, 3].map { |n| n * 2 }
p numbers # [2, 4, 6]

|n| задаёт параметр блока, а последнее выражение возвращает значение текущего вызова. Для блока также возможна запись do ... end. Обычно фигурные скобки используют для компактных блоков, но язык не запрещает многострочное содержимое.

Литерал хеша:

user = { name: "Anna", age: 30 }
settings = { "theme" => "dark", notifications: true }
empty = {}

Здесь создаются пары ключей и значений, а не выполняемый блок. Хеши можно вкладывать в массивы и наоборот: [{ id: 1 }, { id: 2 }].

Интерполяция:

name = "Anna"
puts "Hello, #{name.upcase}!"

В строке с двойными кавычками #{...} вычисляет выражение и вставляет результат. Это отдельная конструкция; у обычной строки в одинарных кавычках такой интерполяции нет. Литералы Ruby.

Наконец, {...} и do...end для блоков имеют разный приоритет. В сложном вызове без круглых скобок они могут прикрепиться к разным методам. Если привязка неочевидна, добавьте круглые скобки и не полагайтесь на визуальный отступ. Передача блоков.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку