我引用了这个在线教程: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参考手册的每一行代码,直到你知道它是做什么的。