Tabel 脚本无法运行

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)

它一直报错说全局变量 p不存在。有人能帮我解决这个问题吗?

点赞
用户5675002
用户5675002

全局变量 p 不存在

在 Lua 中,类似于 variable = expression.. 的语句直到 expression 被执行时才会创建变量。因此,在编译表达式时,如果变量是本地的,在 expression 的作用域内变量是不可见的。编译器会认为你在引用某个全局变量,然后你就会在运行时出现错误。

值得注意的例外是 local function name() 语法糖,它首先创建变量,然后分配函数体,这允许从函数体内访问变量。

如果你想从将要分配给该变量的表达式中访问本地变量,你必须先创建/声明变量。例如,你可以用 local varname 声明它,或者用部分填充的数据创建它,然后分配额外的字段来引用变量。

顺便说一下,除非你真的需要全局变量,否则应该避免使用全局变量。这个 pl = {} 看起来像是创建新实例的数据,而实际上它替换了全局变量 pl,因此所有对象都会在同一数据实例上操作。

2018-04-20 06:09:23