Структура
В пролшом уроке мы поняли, что создавая новый класс мы создаем экземпляр класса Class
, но это не единственный способ создать такой экземпляр. Struct
позволяем нам создать новый класс прямо во время выполнения нашей программы.
# Каждый символ в аргументах это новая переменная
Person = Struct.new(:name, :age, :address)
person = Person.new('John', 23, 'Moscow')
p person # Person(name = John, age = 23, address = Moscow)
puts person.age # 23
Помимо создания переменных мы можем также создавать и методы, инициализируя их в блоке кода
Person = Struct.new(:name, :age, :address) do
def get_full_info
"I'm #{name}, #{age} y.o. I'm from #{address}"
end
end
person = Person.new('John', 23, 'Moscow')
puts person.get_full_info # I'm John, 23 y.o. I'm from Moscow
Мы также можем наследоваться от структуры
# В данном случае объект Struct заменяет конструктор у класса
class Person < Struct.new(:name, :age, :address)
def get_full_info
"I'm #{name}, #{age} y.o. I'm from #{address}"
end
end
Но все таки не следует делать такое наследование в реальной практике, так как есть аспекты, которые нарушают принципы ООП:
при создании объекта нашего класса необязательно передавать все аргументы
Все атрибуты нашего класса будут иметь
public
доступ
В основном структуры понадобятся, когда необходимо создать временный класс, который не будет использоваться в других местах программы.
Дополнительный материал
Last updated