当 Ruby `Complex` class 的关系运算符 none 除了 `==` 时,它的祖先怎么会有 `Comparable` 呢?

How can Ruby `Complex` class have `Comparable` in its ancestors when it has none of its relational operator except `==`?

确实:

Comparable.instance_methods # => [:clamp, :<=, :>=, :==, :<, :>, :between?]
Complex.ancestors # => [Complex, Numeric, Comparable, Object, PP::ObjectMixin, Kernel, BasicObject]
Complex.instance_methods.select{Comparable.instance_methods.include? _1} # => [:==]

当然,==也是在BasicObject中定义的,所以即使==也不算多

这怎么可能?你能删除 Ruby 中的祖先方法吗?

是否可以完全删除方法?

您可以通过两种方式删除方法,undef_method and remove_method

undef_method 将移除竞争调用该方法的能力,但 remove_method 将仅移除当前方法,让您回退到存在的超级方法。

class Foo
  undef_method :bar
end