From: Aaron Patterson Date: 2014-01-09T14:04:23-08:00 Subject: [ruby-core:59672] Re: [ruby-trunk - Feature #7688] Error hiding with rb_rescue() on Comparable#==, #coerce and others On Fri, Jan 10, 2014 at 06:03:03AM +0900, Eregon (Benoit Daloze) wrote: > > Issue #7688 has been updated by Eregon (Benoit Daloze). > > > @tenderlove These are probably bugs then, is it not? I will try to have a look. I can't say for sure whether or not it's bugs, but I can say I don't really like this change. Say you write a class like this: class MyObject include Comparable def <=> other raise ArgumentError unless other.is_a?(MyObject) # Do some comparisons end end I raise an argument error because they are not comparable. To me it implies that `self` and `other` are also not equal, but not that `==` should raise an exception. I'd never expect this to raise an exception regardless of the implementation of <=>: MyObject.new != 10 IOW it seems like <=> is to ==, what respond_to? is to method_missing. Anyway, I'm not a *huge* fan, but this does break our tests (though I can fix them). It seems like I would have to implement `==` with exactly the same logic as `<=>`, except return nil (to indicate it isn't comparable) instead of raise an exception (which is exactly what == does before this change). Could we find a middle ground and just rescue ArgumentError? Or some sort of NonComparable error? -- Aaron Patterson http://tenderlovemaking.com/