Ruby的数组如何.|比较要素是否相等?

这是一些示例代码:

class Obj
  attr :c,true

  def == that
    p '=='
    that.c == self.c
  end
  def <=> that
    p '<=>'
    that.c <=> self.c
  end
  def equal? that
    p 'equal?'
    that.c.equal? self.c
  end
  def eql? that
    p 'eql?'
    that.c.eql? self.c
  end
end

a = Obj.new
b = Obj.new

a.c = 1
b.c = 1

p [a] | [b]

它打印2个对象,但它应该打印1个对象.没有调用任何比较方法. Array怎么样.|比较平等?

解决方法

阵列#|是使用哈希实现的.因此,为了使您的类型与它一起使用(以及使用哈希映射和散列集),您将必须实现eql? (你做了)和哈希(你没有).有意义地定义哈希的最直接的方法是返回c.hash.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...