3

所以我有一个类似的lua文件:

x = { __index = x}

constructor = function()
    local o = {}
    return setmetatable(o,x)
end

function x:print()
    print("hello world")
end

我在解释器中输入以下内容:

dofile "file.lua"
a = constructor()
a:print() --error attempt to call method 'print' (a nil value)

dofile "file.lua"
a = constructor()
a:print() -- hello world

该方法在我第二次导入文件时有效,但不是第一次。为什么是这样?我试过改变顺序(把构造函数放在最后),结果是一样的。

4

1 回答 1

3

第一次x是零。它被定义,然后第二次使用。

你需要写x = {}; x.__index = x

于 2013-10-11T00:02:28.213 回答