From: "byroot (Jean Boussier) via ruby-core" <ruby-core@...>
Date: 2023-10-17T19:53:40+00:00
Subject: [ruby-core:115073] [Ruby master Misc#19931] to_int is not for implicit conversion?

Issue #19931 has been updated by byroot (Jean Boussier).


I may be wrong, but my understanding of it is that it's so the right hand side isn't always casted to the left-hand side type.

If `to_int` was invoked when doing `Integer + something`, then `1 + 1.5` would be `1 + (1.5).to_int` and would return `2` instead of `2.5`.

Hence why numerics use `coerce` instead.

----------------------------------------
Misc #19931: to_int is not for implicit conversion?
https://bugs.ruby-lang.org/issues/19931#change-104946

* 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/
 ______________________________________________
 ruby-core mailing list -- ruby-core@ml.ruby-lang.org
 To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
 ruby-core info -- https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-core.ml.ruby-lang.org/