2

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

如何调用 super()?

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

  • 发出呼叫的类 (CallerClass)
  • 要传递的实例(self)
  • 方法名(方法)

我在这三种形式之间犹豫不决:

--# 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,您可以对其进行子类化。我有另一个版本,我在其中引入了 Class 符号。

它的用途是从类中区分实例。IE :

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

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

assert(self:isKindOf(Class))

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

4

3 回答 3

1
--# Python style, which is nice too:
super(CallerClass, self):method()
于 2008-10-22T06:36:46.553 回答
1

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

于 2008-10-22T06:37:27.207 回答
0

谢谢克里斯,完成。

对于那些感兴趣的人,代码发布在 Lua 用户 Wiki 上,请参阅ObjectLua

于 2008-10-23T09:46:46.437 回答