Взаимодействие с объектами класса в Ruby - PullRequest
0 голосов
/ 21 апреля 2010

Как я могу взаимодействовать с объектами, которые я создал, основываясь на их атрибутах в Ruby?

Чтобы дать некоторый контекст, я анализирую текстовый файл, который может содержать несколько сотен записей, таких как:

ASIN: B00137RNIQ

------------------------- Информация о состоянии -------------------- -----
Загрузка создана: 2010-04-09 09: 33: 45
Состояние загрузки: Импортировано
Идентификатор состояния загрузки: 3

Я могу проанализировать вышесказанное с помощью регулярных выражений и использовать данные для создания новых объектов в классе «Product»:

class Product
  attr_reader :asin, :creation_date, :upload_state, :upload_state_id

  def initialize(asin, creation_date, upload_state, upload_state_id)
    @asin = asin 
    @creation_date = creation_date
    @upload_state = upload_state
    @upload_state_id = upload_state_id
  end
end

После разбора необработанный текст сверху будет сохранен в объекте, который выглядит следующим образом:

[#<Product:0x00000101006ef8 @asin="B00137RNIQ", @creation_date="2010-04-09 09:33:45  ", @upload_state="Imported  ", @upload_state_id="3">]

Как я могу взаимодействовать с вновь созданными объектами класса? Например, как я могу получить все даты создания для объектов с upload_state_id 3? У меня такое чувство, что мне придется писать методы класса, но я немного застрял в том, с чего начать.

1 Ответ

1 голос
/ 21 апреля 2010

Вам необходимо хранить объекты Product в коллекции. Я буду использовать массив

product_collection = []
# keep adding parse products into the collection as many as they are
product_collection << parsed_product_obj

#next select the subset where upload_state_ud = 3
state_3_products = product_collection.select{|product| product.upload_state_id == 3}

attr reader - декларативный способ определения свойств / атрибутов вашего класса продукта. Таким образом, вы можете получить доступ к каждому значению как obj.attribute, как я сделал для upload_state_id выше.

select выбирает элементы в целевой коллекции, которые соответствуют определенным критериям. Каждому элементу присваивается продукт, и если критерий оценивается как истинный, он помещается в выходной набор.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...