Hash
使用eql?
检查其密钥:
foo = 'str'
bar = 'str'
foo.equal?(bar) #=> false
foo.eql?(bar) #=> true
h = { foo => 1 }
h[foo] #=> 1
h[bar] #=> 1
但是,如果我将自己的班级用作关键词,那么这不起作用:
class Cl
attr_reader :a
def initialize(a)
@a = a
end
def eql?(obj)
@a == obj.a
end
end
foo = Cl.new(10)
bar = Cl.new(10)
foo.equal?(bar) #=> false
foo.eql?(bar) #=> true
h = { foo => 1 }
h[foo] #=> 1
h[bar] #=> nil
为什么最后一行返回nil
而不是1
?
答案 0 :(得分:1)
eql?
必须与返回哈希码的hash
方法一起使用:
class Cl
attr_reader :a
def initialize(a)
@a = a
end
def eql?(obj)
@a == obj.a
end
def hash
@a
end
end
请参阅this blog post。