------ art_3802_2404317.1144755565143 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Thanks Daniel, I omitted the eql?. Now it works. Radek On 4/11/06, Daniel Harple <dharple / generalconsumption.org> wrote: > > On Apr 11, 2006, at 12:28 PM, Radek Skokan wrote: > > > I have a Set which should contains elements of my object Component. > > The > > component class implements method hash. I'm gathering data, createing > > Componets from them and storing it into the Set. It's a Set just to > > prevent > > duplicates. But finally the Set contains duplicate elemets -- with > > the same > > hash value. > > You must implement #eql? and #hash -- > > require 'set' > > class Component > attr_accessor :attributes > attr_reader :name, :subcomponents > def initialize(name) > @name = name > @attributes = {} > @subcomponents = [] > end > def inspect() %{<%s hash=%#x @name=%s>} % [self.class.name, > self.hash, @name.inspect] end > def eql?(other) @name.eql?(other.name) end > def hash() @name.hash end > end > > components = Set.new > components << Component.new("foo") > components << Component.new("bar") > components << Component.new("foo") > components.each { |c| puts c.inspect } > > -- Daniel > > ------ art_3802_2404317.1144755565143--