学习“LUA面向对象”时看到下面一段程序,对“obj”这个变量的作用域非常奇怪,求大家帮忙 解答,谢谢!
这个obj变量有local修饰,但却是定义在函数new_counter内部的,我理解应该是new_counter的局部变量,可是为什么do ... end这个chunk中其他函数也能访问?
而一旦把这个变量直接移出new_counter函数,反而会报错?
这个“obj”到底是一个什么作用域的变量?
do
local function get(self)
return self.count
end
local function add(self)
self.count = self.count+1
end
function new_counter(value)
if type(value) ~= "number" then
count = 0
else
--count = value
end
local obj =
{
count = value,
get = get,
add = add,
}
return obj
end
end
counter1 = new_counter(10)
counter2 = new_counter(100)
print("counter1 = "..counter1:get())
print("counter2 = "..counter2:get())
counter1:add()
counter2:add()
print("counter1 = "..counter1:get())
print("counter2 = "..counter2:get())
counter1:add()
counter2:add()
print("counter1 = "..counter1:get())
print("counter2 = "..counter2:get())
这个obj变量有local修饰,但却是定义在函数new_counter内部的,我理解应该是new_counter的局部变量,可是为什么do ... end这个chunk中其他函数也能访问?
而一旦把这个变量直接移出new_counter函数,反而会报错?
这个“obj”到底是一个什么作用域的变量?
do
local function get(self)
return self.count
end
local function add(self)
self.count = self.count+1
end
function new_counter(value)
if type(value) ~= "number" then
count = 0
else
--count = value
end
local obj =
{
count = value,
get = get,
add = add,
}
return obj
end
end
counter1 = new_counter(10)
counter2 = new_counter(100)
print("counter1 = "..counter1:get())
print("counter2 = "..counter2:get())
counter1:add()
counter2:add()
print("counter1 = "..counter1:get())
print("counter2 = "..counter2:get())
counter1:add()
counter2:add()
print("counter1 = "..counter1:get())
print("counter2 = "..counter2:get())