2010-04-21 6 views
0

Ruby에서 주어진 속성을 기반으로 생성 한 객체와 어떻게 상호 작용할 수 있습니까?Ruby의 클래스 객체와 상호 작용

ASIN :

나는 다음과 같이 수백 개의 항목이있을 수있는 텍스트 파일을 구문 분석하고있어, 일부 컨텍스트를 제공하기 위해 B00137RNIQ

를 ----------- -------------- 상태 정보 -------------------------
업로드 한 파일 : 2010-04-12 09 9시 33분 45초
업로드 상태 : 수입
업로드 상태 ID : 3

나는 정규식 위를 구문 분석하고 "제품"클래스의 새로운 객체를 생성하기 위해 데이터를 사용할 수 있습니다

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

질문에 대한 답변이 아니지만이 경우 구조가 충분할 수 있습니다. 전체 클래스는 다음과 같이 작성할 수 있습니다. Product = Struct.new (: asin, : creation_date, : upload_state, : upload_state_id) – steenslag

+0

질문을 어지럽게 사용하기 위해 코드에서 몇 가지 클래스 메서드와 변수를 제거했습니다. 그렇지 않으면 네, 구조가 충분하다고 생각합니다. – michaelmichael

답변

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 리더 속성을 정의하는 선언적인 방법입니다 배열을 사용합니다/제품 클래스 속성. 따라서 위의 upload_state_id에 대해 수행 한 것처럼 각 값에 obj.attribute으로 액세스 할 수 있습니다.

select은 특정 기준을 충족하는 대상 컬렉션의 요소를 선택합니다. 각 요소는 제품에 지정되며 기준이 true로 평가되면 출력 컬렉션에 배치됩니다.

+0

차가움. 나는'product_collection' 배열을 클래스 변수로 추가하고 초기화하는 동안 각 제품을 그것에 추가하려고합니다. 지금 완벽하게 이해합니다. – michaelmichael