Middle
65
questionbank

Зачем передавать блок при инициализации массива?

Получайте ответы на вопросы в реальном времени с Sobes Copilot
Ответ от нейросети sobes.tech

При инициализации массива с помощью Array.new(size, &block) или Array.new(size) { ... }, блок используется для динамического определения значения каждого элемента. Без блока, если указан только размер, все элементы инициализируются значением nil. Если указать начальное значение, все элементы будут ссылаться на один и тот же объект.

Преимущества использования блока:

  • Динамическая инициализация: Каждый элемент инициализируется независимым значением, которое может зависеть от своего индекса.
  • Создание уникальных объектов: Если элементы массива должны быть уникальными объектами (например, массивами, хэшами или экземплярами классов), блок создаст новый объект для каждого элемента, вместо того чтобы все элементы ссылались на один и тот же объект.

Пример:

ruby

Блок принимает аргумент — индекс текущего элемента массива, что позволяет создавать элементы с зависимостью от их положения:

ruby

Использование блока при инициализации массива — это гибкий способ создания массива с произвольными, часто уникальными, начальными значениями для каждого элемента.