Lua中OOP库的设计问题

时间:2008-10-22 06:26:05

标签: oop lua

我在Lua中实现了一个小的OOP库,还有两件事情还不对。我需要你的建议!

如何调用super()?

我需要做出选择。我需要解决对super()的调用的三个参数是:

  • 正在进行通话的班级(CallerClass)
  • 要传递的实例(自我)
  • 方法(方法)的名称

我对这三种形式犹豫不决:

--# Current way:
self:super(CallerClass):method()

--# Variant, which I now find cleaner:
CallerClass:super(self):method()

--# Python style, which is nice too:
super(CallerClass, self):method()

哪一个看起来更好,更容易记住?

我需要一个班级符号吗?

在当前版本中,唯一的概念是名为Object的表,您可以将其子类化。我有另一个版本,我介绍了一个类符号。

它的用途是告诉类中的实例。即:

assert(Object:isKindOf(Class))
local object = Object:new()
assert(not object:isKindOf(Class))

我发现通过以下方式启动方法来记录并强制必须从类中调用方法非常方便:

assert(self:isKindOf(Class))

在Lua中有用吗?你怎么看?谢谢!

3 个答案:

答案 0 :(得分:1)

--# Python style, which is nice too:
super(CallerClass, self):method()

答案 1 :(得分:1)

我想说有一个类对象 - 更多信息/元数据更好

答案 2 :(得分:0)

谢谢克里斯,完成了。

对于有兴趣的人,代码发布在Lua Users Wiki上,请参阅ObjectLua