From: Brian Candler Date: 2007-03-11T00:01:15+09:00 Subject: Re: ruby / php operator differences. On Sat, Mar 10, 2007 at 01:55:19PM +0900, Aaron Smith wrote: > > It's the same in Ruby, except it goes further: > > > > int |= 0x10000000 > > > > is short for > > > > int = int | 0x10000000 > > > > is short for > > > > int = int.|(0x10000000) # infix operator is really method call on > > LHS > > > > is short for > > > > int = int.send(:|, 0x10000000) # explicit method call by symbolic name > > pretty flippin cool. > > in this example: > int = int.send(:|,0x1000000) > > is it neccessary to have assignment portion? as in: > int.send(:|,0x1000000), does this take out the need for (int=) You don't need to make use of the return value. Every expression in Ruby returns a value, but you can simply ignore it. In your particular example, if you write int = 4 int.send(:|, 0x10000000) it's valid Ruby but isn't very useful, as it calculates a result and then throws it away. But many methods do have side effects: str = "hello" str.send(:concat, " world") puts str Actually you'd normally write the middle line as str.concat(" world") or str.concat " world" or str << " world" (since the << infix operator expands to a << method call on str, and for Strings the << method does the same as concat) This stems from the fact that a String in Ruby is a mutable object (it can change). Most objects are. However a few objects, in particular numbers and symbols, are immutable. That is, you can't send a message to the number 5 telling it to change its value :-) Regards, Brian.