Struct

Структура - это упрощенный способ определения простых классов, объединяющих несколько атрибутов и автоматически предоставляющих методы-геттеры и сеттеры для этих атрибутов. Она создает новый класс, который ведет себя как легковесный объект с атрибутами, определяемыми при инициализации.

Person = Struct.new(:name, :age)

person = Person.new("Artem", 37)
puts person.name # => Artem
puts person.age # => 37

Метод Struct.new генерирует класс Person с атрибутами name и age, а также методами для получения и установки этих значений. В этом случае Struct избавляет от необходимости явно определять класс с инициализатором и методами доступа к этим атрибутам.


Одно из главных преимуществ Struct заключается в том, что он ведёт себя точно так же, как обычный класс Ruby, поэтому можно добавлять в него собственные методы. Это позволяет инкапсулировать логику, связанную с объектом Struct.

TripSummary = Struct.new(:destination, :duration, :price) do
def total_cost_with_tax(tax_rate)
price + (price * tax_rate)
end
end

summary = TripSummary.new("Hawaii", "7 days", 1500)
puts summary.total_cost_with_tax(0.10) # => 1650