p = {PlayerName= "",
y = 0,
new = function ()
pl = {}
for i,v in pairs(p)do
pl[i] = v
end
return pl
end,
jump = function(y1)
p.y1 = p.y + p.y1
end,
}
p1 = p.new
p1.PlayerName = "jo"
p1.y = 2
print(p1.PlayerName,p1.y)
它一直给我一个错误,说global p does not exist
。任何人都可以帮我解决这个问题
答案 0 :(得分:0)
全局p不存在
它在Lua中的工作方式,像variable = expression..
之类的语句在表达式被评估之前不会创建变量。因此,在编译表达式时,如果变量是局部变量,则该变量在表达式的范围内不可见。编译器会假设您引用了一些全局变量,并在运行时最终得到该错误。
值得注意的例外是local function name()
语法糖,它首先创建变量,然后分配函数体,允许从函数体内访问变量。
如果要从将分配给该变量的表达式中访问局部变量,则必须首先创建/声明变量。比如说,您可以使用local varname
声明它,或者使用部分填充的数据创建它,然后分配将引用该变量的其他字段。
旁注,避免使用全局变量,除非你确实需要全局变量。 pl = {}
看起来像创建新实例的数据,而目前它将替换全局变量pl
,因此所有对象都将在同一数据实例上运行。