
Issue #19931 has been updated by Dan0042 (Daniel DeLorme). A few weeks ago I experimented and tried to polyfill this via Object#coerce, and it doesn't result in `0 ^ 1.1 == 1` ```ruby class Object def coerce(other) if self.respond_to?(:to_int) to_int.coerce(other) else raise TypeError, "#{self.class} can't be coerced into #{other.class}" end end end x = Object.new def x.to_int = 5 1 + x #=> 6 0 ^ 1.1 #1.1 can't be coerced into Integer (TypeError) ``` ---------------------------------------- Feature #19931: to_int is not for implicit conversion? https://bugs.ruby-lang.org/issues/19931#change-105454 * Author: Dan0042 (Daniel DeLorme) * Status: Open * Priority: Normal ---------------------------------------- While reviewing some implicit vs explicit conversion concepts, I discovered that arithmetic operations do not perform the implicit conversion I expected from #to_int ```ruby o = Object.new def o.to_int; 1; end 1 + o #TypeError ``` I understand there's the whole #coerce thing for numbers, but I had expected #to_int to fit neatly into this and cause the object to be implicitly coerced to Integer. So basically I thought that #to_i was for explicit conversion and #to_int for implicit conversion; is that not the case? Most of the internet seems to think that (to_int : to_i) relationship is like (to_str : to_s). But I can't seems to find authoritative documentation on the topic. -- https://bugs.ruby-lang.org/