変数のスコープ
レキシカルスコープ
a = 1 function f(x, y) return(x+a, y+a) end print(f(1, 2)) # => 2, 3 a = 2 print(f(1, 2)) # => 3, 4
また、 local 宣言でローカルスコープを積むことができる。ただしローカルスコープの終端が決定できないので、積むときには
do local a = 1 end print(a) # => nil
などとする。
なお、グローバルスコープ全体を表現するテーブル _G というのがある。これを使うと、 local 宣言したものは(終端がわからないとしても)ローカルなスコープでしかないことが確かめられる。
a = 1 for i, j in _G do print(i, j) # a がある end local b = 1 for i, j in _G do print(i, j) # a はあるが b はない end local a = 2 print(a) # => 2 print(_G.a) # => 1