Что означает аргумент при создании объекта класса в Ruby?

Как ClassName.new передаёт параметры в initialize, чем позиционные аргументы отличаются от ключевых и где расположен splat.

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

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

Обычно имеется в виду аргумент вызова Person.new(...), который стандартный механизм new передаёт в initialize для настройки нового объекта. initialize может принимать обязательные, необязательные, позиционные и ключевые параметры. Class.new — другой вызов: он создаёт новый класс. При смешивании параметров *rest записывают до ключевых аргументов.

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

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

Выражение «аргумент для класса» неточно: аргументы передают методу. В типичном случае речь о вызове Person.new(...), который выделяет объект и вызывает его initialize с переданными аргументами. Они задают начальное состояние:

class Person
  attr_reader :name, :age

  def initialize(name, age: nil)
    @name = name
    @age = age
  end
end

person = Person.new("Anna", age: 30)
puts person.name # Anna

Здесь name — обязательный позиционный параметр, а age — ключевой с значением по умолчанию. Не следует путать Person.new с Class.new: второй создаёт объект нового класса, которому при необходимости задают суперкласс.

Более общий пример сочетания параметров:

class Example
  attr_reader :arguments

  def initialize(required, optional = "default", *rest, mode: "normal")
    @arguments = [required, optional, rest, mode]
  end
end

p Example.new(1, 2, 3, 4, mode: "custom").arguments
# [1, 2, [3, 4], "custom"]

Позиционные аргументы идут перед ключевыми; *rest собирает оставшиеся позиционные значения. Для произвольных ключевых аргументов используют **options. Отсутствие обязательного аргумента или неизвестный ключ при строгой сигнатуре приводит к ArgumentError.

Отдельный возвращаемый результат initialize не становится результатом new: стандартный new возвращает созданный экземпляр. Для ясного интерфейса обычно лучше несколько понятных параметров, чем длинный неструктурированный список. Параметры методов Ruby, Class.

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

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

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

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