Quoting chiaro scuro <kiaroskuro / gmail.com>: > I guess that in principle when you see an '=', you could lookup a > 'name=' method before deciding that it is a local var assignment > rather than a method call. > > I also understand that there will be perfromance issues with > that. > > did I miss something? In Ruby's grammar, expressions containing a name parse differently depending on whether that name is a variable or a method. Whatever rule is used has to be able to distinguish between the two at parse-time; you can't rely on run-time information. So, the current parsing rule is: "If you see an assignment to a bare name, that name means a variable until the end of the block/method. Until then it means a method call." e.g.: def foo n # method end def bar n = 3 n # variable end def baz n # method n = 3 n # variable end Note that it doesn't matter if the assignment is actually performed, just that the parser sees it: def hoge n # method if false n = 3 end n # variable end (uninitialized variables are nil) -mental