T
Tom Willis
Hi all,
I didn't want my first bit of participation on this list to be
something this silly. But I'm afraid I missed something vital in my 48
hour crash course.
If someone could take 10 seconds and tell me what I'm doing wrong I'd
greatly appreciate it and will give you props in my epitaph.
Feel free to point out and make fun of the style too I have thick skin.
I want to use an object as a key in a Hash.
here's some example code...
def main
puts "running this script..."
testpointid
end
def testpointid
p = PointID.new(1,1)
p2 = PointID.new(1,2)
pdup = PointID.new(1,1)
print "p!=pdup\n" if p!=pdup
d = Hash.new()
d[p]="point1"
d[p2]="point2"
#both of these return nil and I don't understand why
print "PointID test failed" if d[p]!="point1"
print "PointID test failed" if d[pdup]!="point1"
#this works, but it's not quite the interface I want
d[p.hash]="point1"
d[p2.hash]="point2"
print "PointID test failed" if d[p.hash]!="point1"
print "PointID test failed" if d[pdup.hash]!="point1"
end
class PointID
attr_reader :x,:y
def initialize(x,y)
@x = x
@y = y
@x.freeze
@y.freeze
end
def hash
return [@x.object_id,@y.object_id].to_s
end
def ==(other)
return hash == other.hash
end
def to_s
return hash()
end
end
I didn't want my first bit of participation on this list to be
something this silly. But I'm afraid I missed something vital in my 48
hour crash course.
If someone could take 10 seconds and tell me what I'm doing wrong I'd
greatly appreciate it and will give you props in my epitaph.
Feel free to point out and make fun of the style too I have thick skin.
I want to use an object as a key in a Hash.
here's some example code...
def main
puts "running this script..."
testpointid
end
def testpointid
p = PointID.new(1,1)
p2 = PointID.new(1,2)
pdup = PointID.new(1,1)
print "p!=pdup\n" if p!=pdup
d = Hash.new()
d[p]="point1"
d[p2]="point2"
#both of these return nil and I don't understand why
print "PointID test failed" if d[p]!="point1"
print "PointID test failed" if d[pdup]!="point1"
#this works, but it's not quite the interface I want
d[p.hash]="point1"
d[p2.hash]="point2"
print "PointID test failed" if d[p.hash]!="point1"
print "PointID test failed" if d[pdup.hash]!="point1"
end
class PointID
attr_reader :x,:y
def initialize(x,y)
@x = x
@y = y
@x.freeze
@y.freeze
end
def hash
return [@x.object_id,@y.object_id].to_s
end
def ==(other)
return hash == other.hash
end
def to_s
return hash()
end
end