Ответ 1
A Struct - удобный способ объединить несколько атрибутов вместе, используя методы доступа, без необходимости писать явный класс.
Класс Struct генерирует новые подклассы, содержащие набор элементов и их значения. Для каждого члена создается метод чтения и записи, аналогичный модулю # attr_accessor.
Итак, если мне нужен класс Person
, я могу получить доступ к атрибуту имени (читать и писать), я либо делаю это, объявляя класс:
class Person
attr_accessor :name
def initalize(name)
@name = name
end
end
или используя Struct:
Person = Struct.new(:name)
В обоих случаях я могу запустить следующий код:
person = Person.new
person.name = "Name"
#or Person.new("Name")
puts person.name
При использовании?
В качестве состояний описания мы используем Structs, когда нам нужна группа доступных атрибутов без необходимости писать явный класс.
Например, я хочу, чтобы переменная точки сохраняла значения X и Y:
point = Struct.new(:x, :y).new(20,30)
point.x #=> 20
Еще несколько примеров:
- http://blog.steveklabnik.com/posts/2012-09-01-random-ruby-tricks--struct-new
- "Когда использовать Struct вместо Hash в Ruby?" также имеет некоторые очень хорошие моменты (по сравнению с использованием хэша).