与Ruby中的类对象交互

时间:2010-04-21 15:16:11

标签: ruby

如何根据Ruby中给定的属性与我创建的对象进行交互?

为了给出一些上下文,我正在解析一个可能有几百个条目的文本文件,如下所示:

  

ASIN:B00137RNIQ

     

-------------------------状态信息-------------------- -----
  上传创建时间:2010-04-09 09:33:45
  上传状态:导入
  上传状态ID: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 个答案:

答案 0 :(得分:1)

您需要将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是一种在产品类中定义属性/属性的声明性方法。因此,您可以像上面的upload_state_id一样以obj.attribute的形式访问每个值。

select选择目标集合中符合特定条件的元素。每个元素都分配给product,如果条件评估为true,则将其放在输出集合中。