我有一个Foo类,里面有一些成员变量.当类的两个实例中的所有值相等时,我希望对象"相等".然后,我想将这些对象作为哈希中的键.当我目前尝试这个时,哈希将每个实例视为不相等.
h = {}
f1 = Foo.new(a,b)
f2 = Foo.new(a,b)
Run Code Online (Sandbox Code Playgroud)
此时f1和f2应该相等.
h[f1] = 7
h[f2] = 8
puts h[f1]
Run Code Online (Sandbox Code Playgroud)
应该打印8
Mar*_*ark 57
见http://ruby-doc.org/core/classes/Hash.html
哈希使用key.eql?测试密钥是否相等.如果您需要将自己的类的实例用作Hash中的键,建议您同时定义eql?和哈希方法.哈希方法必须具有a.eql?(b)暗示a.hash == b.hash的属性.
这个eql?方法很容易实现:如果所有成员变量都相同,则返回true.对于哈希方法,请使用[@ data1,@ data2] .hash,正如Marc-Andre在评论中所建议的那样.