Allow `+=` etc. to be methods
In MRI, it is currently possible to create
#+= methods in C extensions and even
+= aliases for existing methods in Ruby source code. These methods are only callable via
#send('+=', ...) because the parser interprets
a += b as
a = a + b before the "operator method" is called. Thus,
a += b is currently equivalent to
a = a.send('+', b) rather than
a.send('+=', b). This feature request is to allow and support
<OP>= methods, where
<OP> is any of Ruby's operators that can be defined as methods (e.g.
A related feature request would be to allow
#<attribute><op>= methods in addition to the already supported
#<attribute>= methods. As it is now,
foo.bar += x is equivalent to
foo.send('bar=', foo.send('bar').send('+', x)), which requires that the return value of
#+ and that
#bar=. If this related feature were implemented,
foo.bar += x would be equivalent tofoo.send('bar+=', x)`.
I guess this would be tricky to add in a backwards compatible way. What happens if
#+= is not defined for the would-be receiver? How would that condition be detected in a way that could fall back to the old default behavior?
What other possible complications could make this request impractical?