Hi -- On Sat, 6 Jan 2007, Chris Gernon wrote: > I thought calling a method without a receiver (i.e. name, name=) within > an instance method would always call that method on the current object. > Is this not true for setters (i.e. Thingy#name=)? It is not true for setters. The way it works is that when the parser sees: bareword = ... it defines bareword as a local variable. Therefore, you always need an explicit receiver for that kind of method, so Ruby will know it's a method. There are some interesting side-effects from this. For example: if false a = 1 end puts a # nil Even though "a = 1" is never executed, it's picked up by the parser, and a gets defined. That's why "puts a" doesn't raise an "unknown method or local variable" error. > Additionally, why is the first instance of name interpreted as a method > call and the last instance interpreted as (I think) a local variable? If both are defined, the local variable takes precedence. You can force method interpretation with parentheses: name() but of course in practice it's better not to reuse the names. David -- Q. What is THE Ruby book for Rails developers? A. RUBY FOR RAILS by David A. Black (http://www.manning.com/black) (See what readers are saying! http://www.rubypal.com/r4rrevs.pdf) Q. Where can I get Ruby/Rails on-site training, consulting, coaching? A. Ruby Power and Light, LLC (http://www.rubypal.com)