From: MenTaLguY Date: 2007-04-06T03:03:57+09:00 Subject: Re: Why is local variable created in one branch of if statement available in the other? On Fri, 6 Apr 2007 02:49:27 +0900, "Alexey Verkhovsky" wrote: > I find it hard to understand why this code prints nil instead of > saying "unknown method or local variable foo": > >> cat hmm.rb > def hmm > if false > foo = 'quack' > else > p foo > end > end The decision on whether foo is a method or a variable is made by the parser as it walks through the body of the function, rather than when the function is executed. By default, foo is considered a method, but once it encounters foo = somewhere, it considers foo to be a variable for the remainder of the function. So, by the time the parser processes the else branch of the if statement, it has already seen an assignment in the earlier if branch, and therefore interprets 'foo' as a variable name rather than a method call. -mental