Globals & Locals, I'm confused.

I have a problem with locals, so currently I’m using globals instead, but of course that isn’t really the solution.


// code which makes SOMETHING 0 or 1
if SOMETHING == 1 then
local getal = 10
local getal = math.random( 1, 9 )
// code which uses ‘getal’


Why doesn’t the local work outside the if function? Does it need to be a global? And is it possible to change a local variable -which has been declared before- to another variable inside an if-function and then use it afterwards?

This didn’t really help:

a local is removed after the scope its defined in is exited, do it like this:
[lua]// code which makes SOMETHING 0 or 1
local getal = 10
if SOMETHING != 1 then
getal = math.random( 1, 9 )
// code which uses ‘getal’[/lua]

[editline]21st October 2010[/editline]

Example that should explain it:
[lua]if true then – create new scope simply
local var = “stuff”

First print it will print stuff as the variable is defined in the current scope (or a parent scope)
Second print will print nil as its out of the scope

Ok, thank you, I think I understand this now. The wiki said however, and I quote:

“…It’s the same for an if statement, if you create a variable inside an if statement. It will still be available to the next scope, such as a function.”

If you mean this:
[lua]if ( true ) then
local x = 3
print( x ) – Prints 3[/lua]
Then that is false. Where was that specified?

On the wiki page that didn’t really help:

I think it meant this:

[lua]if true then
local newscope = true

function stuff()



It is a bit of a cryptic description though.

Edit: Just found the example. It says this:

[lua]if something == something then
var = true
function whatisvar()
if var == true then
print(“Var is true!”)

Which is completely incorrect obviously - that’s a global.

To create a new scope you can use ‘do’:
local x = 10
local z = 123
local y = 20
print(x) --10
print(y) --20
print(z) --123
z = 456
print(x) --10
print(y) --nil
print(z) – 456

I know, i just didnt want to confuse him, if true then is more straight-forward than do, which he probably hasent seen used in anything else than loops

Then explain what do is and how and when it should be used instead of teaching bad habits.

Or explain it yourself instead of teaching him a lesson.

Ok, it’s working now, thanks all. I used self.variable by declaring them first (as locals?) and changing their value inside the if-statement. Using self.var was necessary because of the fact that there could be more than one versions of the object.

Is self.var a local?

self.var is not a local, it is table index. It is syntactic sugar (the same thing as) self[“var”].