2010-01-21 4 views
0

내 클래스의 배열에 obj의 존재를 확인하는 include? (obj)와 같은 메소드를 정의하고 싶습니다. 루비에서이 작업을 수행 할 수있는 방법이 있습니까?객체 컬렉션을 위해 루비 메소드를 정의하는 방법은 무엇입니까?

나는 Item 클래스

class Item < ActiveRecord::Base 
    include Comparable 

    belongs_to :itemable, :polymorphic => true 
    def <=>(other) 
     self.itemable.id <=> other.itemable.id 
    end 
... 
end 

하고 난 이런 식

item_set1.subset? item_set2 

을 사용하고 싶지만 그것은 단지 확인 item.id => 과정과 사용 <를 사용하지 않는 밝혀 . 하위 집합이나 다른 방법을 재정 의하여이 작업을 수행하는 방법.

감사합니다.

답변

1

배열이 인스턴스 변수라고 말하고 있습니까? 클래스는 '각'
이 포함 방법의 슬루 얻을 Enumerable 을 믹스 인 할 수 있습니다 구현하는 모음입니다 경우

class Foo 
    def my_array_include?(obj) 
    @my_array.include?(obj) 
    end 
end 
3

'포함을?'

0

세트는 eql을 사용합니까? 해쉬, == 또는 < =>이 아닙니다. 이것을보십시오 :

class Item < ActiveRecord::Base 

    ... 

    def eql?(other) 
    id == other.id 
    end 

    def hash 
    id 
    end 

end 
+0

그 부분 집합? 방법은 eql을 사용합니까? 해당하는 것을 판별하기위한 해시 및 해시? 감사합니다. – sarunw

+0

맞습니다. Set에 저장된 것들은 eql을 필요로합니까? 그리고 의미있는 방식으로 정의 된 해쉬. 기본적으로 Object.eql? "같은 Ruby 객체입니다." 위에서 우리는 "동일한 데이터베이스 객체를 참조합니다."라는 의미로 다시 정의합니다. 이제 모든 하위 집합을 포함한 Set 작업이 작동합니다. –

관련 문제