在Lua中为面向对象编程库设计的问题

如何调用 super()?

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

  • 调用方的类(CallerClass)
  • 要传递的实例(self)
  • 方法的名称(method)

我在以下三种方式之间犹豫:

--# 当前方式:
self:super(CallerClass):method()

--# 变体,现在我认为更简洁的方式:
CallerClass:super(self):method()

--# Python 风格,也挺好:
super(CallerClass, self):method()

在你的看法中,哪种看起来更漂亮或更易于记忆?

我需要一个 Class 符号吗?

在当前版本中,仅有的概念是一个名为“Object”的表格,你可以对其进行子类化。我有另一个版本,其中我引入了一个 Class 符号。

它的用途是告诉实例来自哪个类。例如 :

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

我发现这非常方便,可以通过以下方式在方法开始时文档化和强制执行必须从类中调用该方法:

assert(self:isKindOf(Class))

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

原文链接 https://stackoverflow.com/questions/224658

点赞
stackoverflow用户48310
stackoverflow用户48310
--# Python style, which is nice too:
super(CallerClass, self):method()

Python风格也很不错:

super(CallerClass, self):method()

2008-10-22 06:36:46
stackoverflow用户48310
stackoverflow用户48310

我会说要有一个类对象——更多的信息/元数据更好。

2008-10-22 06:37:27
stackoverflow用户2797
stackoverflow用户2797

感谢 Chris,已完成。

对于感兴趣的人,代码已经发布在 Lua 用户维基上,请参见 ObjectLua

2008-10-23 09:46:46