我已经阅读了很多关于面向对象的 lua(设置元表),并且我已经构建了一个系统,并完成了继承。
我现在的问题是,一些变量似乎正在相互泄漏。如果我调用一个函数调用window:click(x, y)
函数调用就好了。这个功能的工作是通知我所有的点击组件。它正在做什么
for number, component in pairs(self.components) do
component.focus = false
component:click(x, y, msg)
end
self.components
包含窗口的所有组件
为了充当所有组件的基类,我有一个名为 component.lua 的类,此文件创建一个名为 components 的表,并向create()
其添加一个方法(执行所有常见的 OO lua 内容),此基类包含所有方法和我想要在我的所有组件中使用的变量,包括component:click(x, y)
再次调用它。
for key, callback in pairs(self.clickCallback) do
callback()
end
return
该clickCallback
表包含在通知组件时应调用的函数。并在 component.lua 中初始化
从这里我将这个类继承到我的其他类,只需设置我的新组件(文本框、按钮、标签等)的元表。这些组件是添加到self.components
窗口中表格的内容。
问题是这些组件中的每一个都应该有自己的 clickCallback 表。我通过二传手写信给component.lua
function component:addClickHandler(handler)
table.insert(self.clickCallback, handler)
end
但是当我调用click(x,y)
一个组件时,它会调用所有的 clickHandler,无论是另一个按钮还是标签。
正如您在上面看到的,我正在设置一个名为focus
this 的参数似乎遇到了同样的问题,为一个组件设置它(如您所见,我正在循环遍历每个组件)为所有组件设置它(所以如果我有 4 个组件焦点在每个组件上重置 4 次)
为什么lua会这样做,可以做些什么来解决它?