DISCLAIMER: At the time of this post, I, John Gamboa, was not a Ruby or programming expert. A total noob and I wrote this more to familiarize myself with the rules than anything else. What flows through sticks to you.
A scope of a local variable determines if it is accessible or not. For instance, if you were to code this:
var1 = 1
loop do
puts var1
var1 = var1 + 1
break
end
puts var1
Run the code and you’ll find that the last line “puts var1” results in 2 being displayed. Why? Because the variable var1 in the first line is accessible and there can be modified by the loop block.
Rule #1 – Outer scope variables are accessible by the inner scope.
But what about block of code? What does the last line produce?
array = [6, 5, 4] for i in array do var1 = 5 end puts var1
It produces 5. Even though var1 was initiated inside the do/end block, var1 is accessible outside it. For a variable to be inaccessible in a do/end block, the do/end block needs to immediately follow a method invocation. “for” in the code above is not a method invocation, in contrast to the following code:
loop do
var1 = 1
puts var1
var1 = var1 + 1
break
end
puts var1
Since “loop” is a method invocation, the do/end loop following it creates a new block which prevents var1 from being accessed by “puts” in the last line. It results in an error with “undefined local variable or method…” in it. That’s because var1 was initialized inside the loop block, or in the inner scope, and the “puts var1” is outside the block and can’t access var1.
Which means…
Inner scope variables are NOT accessible outside of the block