我的 Lua OOP 实现
My Lua OOP Implementation
我正在处理 Lua,试图让 OOP 工作,运行 遇到一些问题,一切都在我这边,但我想知道我是否遗漏了什么, 否则用这种方法实现oop会出现意想不到的问题
基本上我有底class
local BaseClass = {}
function BaseClass.new()
local self = setmetatable({}, BaseClass)
return self
end
然后是childclass
local ChildClass = {}
function ChildClass.new()
local self = BaseClass.new()
return self
end
同样,一切正常,childclass 继承了基础 class 的所有成员,据我所知,方法基本上是 lua 中的变量,所以它还继承了那些,然后我可以将特定成员添加到 childclass,并调用它们。所以如果它可以更好(但仍然相对轻量级),如果我遇到意外问题或者我正在做一些多余的事情,请告诉我。
你打破了链条。从 ChildClass.new
返回的 table 将与 ChildClass
table.
没有关联
您需要查看 Chapter 16 of Programming in Lua,其中讨论了实现面向对象编程的典型方法。
归根结底,如果要维护链,则需要通过 :
描述符使用隐式 self
。您不需要手动定义 ChildClass
构造函数,而是让它继承 BaseClass
的构造函数,方法是使其成为某种 实例 。
local BaseClass = {}
function BaseClass:new()
self.__index = self
return setmetatable({}, self)
end
local ChildClass = BaseClass:new()
现在您可以为 ChildClass
.
的实例定义共享函数
function ChildClass:foo ()
print('foo!')
end
local child_inst = ChildClass:new()
child_inst:foo()
我正在处理 Lua,试图让 OOP 工作,运行 遇到一些问题,一切都在我这边,但我想知道我是否遗漏了什么, 否则用这种方法实现oop会出现意想不到的问题
基本上我有底class
local BaseClass = {}
function BaseClass.new()
local self = setmetatable({}, BaseClass)
return self
end
然后是childclass
local ChildClass = {}
function ChildClass.new()
local self = BaseClass.new()
return self
end
同样,一切正常,childclass 继承了基础 class 的所有成员,据我所知,方法基本上是 lua 中的变量,所以它还继承了那些,然后我可以将特定成员添加到 childclass,并调用它们。所以如果它可以更好(但仍然相对轻量级),如果我遇到意外问题或者我正在做一些多余的事情,请告诉我。
你打破了链条。从 ChildClass.new
返回的 table 将与 ChildClass
table.
您需要查看 Chapter 16 of Programming in Lua,其中讨论了实现面向对象编程的典型方法。
归根结底,如果要维护链,则需要通过 :
描述符使用隐式 self
。您不需要手动定义 ChildClass
构造函数,而是让它继承 BaseClass
的构造函数,方法是使其成为某种 实例 。
local BaseClass = {}
function BaseClass:new()
self.__index = self
return setmetatable({}, self)
end
local ChildClass = BaseClass:new()
现在您可以为 ChildClass
.
function ChildClass:foo ()
print('foo!')
end
local child_inst = ChildClass:new()
child_inst:foo()