Lua尝试将方法称为零值

时间:2016-11-20 06:35:26

标签: lua

我迷失了我在这里做错的事。

我有这个简单的代码:

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' (零值)。但是,如果我像这样更改PushBack函数并相应地调用它,它可以工作:

function Queue.PushBack(q, item)
end

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

代码运行并正确执行。我理解":"是语法糖,所以在我看来

function Queue:PushBack(item)

完全相同
Queue.PushBack(q, item)

但是我死了。是否与我如何创建对象有关?我很遗憾,我似乎无法弄清楚到底出了什么问题。

1 个答案:

答案 0 :(得分:3)

nil表示在第一种情况下找不到PushBack功能。

您的代码无法正常工作的原因是因为您无意中拼错了__Index,因为它应该是:

Queue.__index = Queue
<{1> i __index为小写。

更正后,您的代码应该有效。