我创建了一个渲染Lua文件,并创建了多个对象,我复制了一小段文件。这是我遇到问题的Object(类)。创建newBox
函数时,this:show()
在调用函数Box:show()
时导致registerBox()
中的错误。尝试调用nil
然而,我已经使用了一些语法(将一行拉伸成多行以确定该行的哪一部分导致错误)我知道该函数不会导致尝试调用{{1它是nil
或任何this.x
我没有正确传递变量吗?请记住,这只是一个片段,所有被调用的函数都被遗漏了,所以我不必发布750行代码。
此外,我已经对一些事情进行了评论,以帮助您理解我的意思,因此您不需要逐行阅读所有代码。
this.<var>
在创建新对象(例如本地-- Box Class
function newBox(x,y,z,w,h,t,b,c)
local this = setmetatable({}, Box)
this.x = x
this.y = y
this.z = z
this.w = w
this.h = h
this.t = t
this.b = b
this.c = c
this:show()
this.v = true
return this
end
obj = newBox( ... )
这会呈现框,不要担心这一切都正常......
function Box:render()
rasterBox(this.x,this.y,this.w,this.h)
renderBox(this.x,this.y,this.w,this.h)
end
上面的代码应该没有任何问题,应该......
function Box:move(x,y,z)
this:hide()
this.x = x
this.y = y
if z then
this.z = z
end
this:show()
end
function Box:resize(w,h)
this:hide()
this.w = w
this.h = h
this:show()
end
function Box:pattern(t,b,c)
this:hide()
this.t = t
this.b = b
this.c = c
this:show()
end
创建对象时,将调用上述函数&gt; function Box:show()
registerBox(this.x,this.y,this.z,this.w,this.h,this.t,this.b,this.c) -- CALL NIL ERROR
this.v = true
this:render()
end
它不是this:show()
函数,而是实际的RegisterBox
参数。
以下是其余代码。不确定下面的代码是否会导致任何问题。
this.[var]
答案 0 :(得分:1)
正如@ user1095108所说,在lua中没有这个,隐藏的,类似这样的参数被称为self
所有类似OOP的机制都被大量描述here,尝试使用简单的例子,理解,它是如何工作的,这很容易。简而言之,冒号是函数声明或调用时间的额外参数的语法糖。 Param被称为self,它是一个对象,在函数调用的左侧。对它的引用传递给函数。
也没用做
function Box:destroy()
this:hide()
this = nil -- Here you assign nil to local variable, passed as parameter.
end
如果你想释放一些对象,你应该确保所有对它的引用都是未引用的,包括来自调用者的对象。参数将自动免费,因为它们是local