Ruby Class vs Struct

Я видел коды, используя Structs, чтобы обернуть атрибуты и поведение внутри класса. В чем разница между классом Ruby и Struct? И когда нужно использовать друг друга.?

Ответы

Ответ 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

Еще несколько примеров:

Ответ 2

Struct - сокращение Ruby для создания классов. Использование Struct там, где это применимо, упрощает ваш код. Существует хорошее обсуждение этого вопроса на https://www.rubytapas.com/2012/11/07/episode-020-struct/