On Feb 25, 2008, at 2:09 PM, Mark Bush wrote:
> Assignment is a syntactic construct.  "b.bar = 3" is not a method  
> call,
> it's an assignment.

I would modify that a bit and say that

   (b.bar = 3)

is an assignment expression with a side-effect
that happens to be a method call.  Consider

   (a = 3)

which is also an assignment expression but with
a side-effect of changing the binding of 'a'.

So the 'strange' behavior of setter methods
comes about because of the context in which they
are called, not because they behave differently
from other methods.

The return value of any method can be discarded
in the right context:

c = begin
   a       # return value discarded
   b       # return value becomes value of begin/end
end

Gary Wright