用于事件处理的Lua OOP



我引用了这个在线教程:https://www.tutorialspoint.com/lua/lua_object_oriented.htm

我特别想要一个包含四个表的类。类的目的是成为一个EventObject。第一个表将保存对另一个类中的函数的引用,第二个表将保存所有变量/参数的列表,第三个表将有一个可选的函数调用和输出到日志的字符串,最后一个表保存一个条件,事件系统在调用第一个表中指定的函数之前必须传递这个条件。

我的问题是,因为我传入四个表,示例只有一个表,然后一些数字变量,我不确定这是否是正确的方法,我正在努力让它做我想做的。

这是我的设置代码。谁能告诉我,我是否漏掉了一个明显的错误?这是我第一次使用元表和元方法之类的东西,所以我有点外行。

TEventObject = { method = {}, args = {}, logStatement = {}, conditionals = {} }

function TEventObject:new ( method, args, logStatement, conditionals )
method       = method       or {}
args         = args         or {}
logStatement = logStatement or {}
conditionals = conditionals or {}

setmetatable(method      , self)
setmetatable(args        , self)
setmetatable(logStatement, self)
setmetatable(conditionals, self)

self.__index      = self
self.method       = method or {}
self.args         = method or {}
self.logStatement = method or {}
self.conditionals = method or {}
return method, args, logStatement, conditionals

end

链接教程中的代码不正确

-- Meta class
Rectangle = {area = 0, length = 0, breadth = 0}
-- Derived class method new
function Rectangle:new (o,length,breadth)
o = o or {}
setmetatable(o, self)
self.__index = self
self.length = length or 0
self.breadth = breadth or 0
self.area = length*breadth;
return o
end

应该是

-- Meta class
Rectangle = {area = 0, length = 0, breadth = 0}
-- Derived class method new
function Rectangle:new (o,length,breadth)
o = o or {}
setmetatable(o, self)
self.__index = self
o.length = length or 0
o.breadth = breadth or 0
o.area = length*breadth;
return o
end

我个人更喜欢

function Rectangle:new (length,breadth)
local o = {}
setmetatable(o, self)
self.__index = self
o.length = length or 0
o.breadth = breadth or 0
o.area = length*breadth;
return o
end

你可以把所有矩形的宽度、长度和面积都改成最近一个矩形的值。

为了弄清楚这一点,你都需要知道代码是做什么的,它实际上应该做什么。我知道这对初学者来说很难。但是您根据需要更改代码的方式清楚地表明,您甚至没有尝试找出原始代码的实际功能。否则我无法解释你是如何想出那些台词的。

请参阅Lua参考手册的每一行代码,直到你知道它是做什么的。

最新更新