我迷失了我在这里做错的事。
我有这个简单的代码:
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)
但是我死了。是否与我如何创建对象有关?我很遗憾,我似乎无法弄清楚到底出了什么问题。
答案 0 :(得分:3)
nil
表示在第一种情况下找不到PushBack
功能。
您的代码无法正常工作的原因是因为您无意中拼错了__Index
,因为它应该是:
Queue.__index = Queue
<{1> i
__index
为小写。
更正后,您的代码应该有效。