Lua尝试调用nil值的方法

我在这里不知道我做错了什么。

我有这个简单的代码:

Queue = {}
Queue.__Index = Queue

function Queue.Create()
    local obj = {}
    setmetatable(obj, Queue)
    return obj
end

function Queue:PushBack(item)
end

q = Queue.Create()
print(q)
q:PushBack(1)

在执行此操作时,我得到"尝试调用方法'PushBack'(一个nil的值)"。 然而,如果我像这样改变PushBack函数,并相应地调用它,它就可以工作:

function Queue.PushBack(q, item)
end

q = Queue.Create()
print(q)
Queue.PushBack(q, 1)

代码可以运行并正确执行。 我理解":"是语法糖,所以我认为

function Queue:PushBack(item)

应该与

Queue.PushBack(q, item)

完全相同,但是它却让我死掉了。 这与我创建对象的方式有关吗? 我对此非常困惑,似乎无法弄清楚到底是什么出了错。

点赞
用户2227834
用户2227834

nil表示在第一个情况中未找到PushBack函数。

你代码出问题的原因是你无意中拼错了__Index,应该是:

Queue.__index = Queue

其中__index里的i应该小写。

一旦更正,你的代码就应该正常工作了。

2016-11-20 08:38:30