如何根据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的对象提取所有创建日期?我觉得我将不得不写类方法,但我有点困在哪里开始。
答案 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,则将其放在输出集合中。