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