【问题标题】:What is the difference between Lua tables and classes?Lua 表和类有什么区别?
【发布时间】:2016-08-15 08:20:47
【问题描述】:

我是一般编程的初学者,我一直在尝试几种不同的语言。在 Lua 中,有些表看起来像是超级列表(数组、字典、列表都合而为一),但在 Lua 中可以这样做:

player = { health = 100, attack = 50, mana = 54 }
print(player.health)

它会返回 100。但在其他编程语言中,您需要创建一个类来获得相同的输出。但据我了解,Lua 既有类又有表?但是表的行为似乎非常相似,所以它们是一样的吗?如果不是,是什么让它们与众不同,使用它们的优缺点是什么?

【问题讨论】:

  • 没有。在我的脑海中,C 结构或 JavaScript 表以及几乎任何其他使用 . 进行哈希/表寻址或提供语法糖的语言都可以完全一样地工作。
  • Lua 没有类。有一些方法可以用元表来模拟它们,但没有内置任何东西。
  • 一个 Lua 表值是一个字典,句号。 Lua 的语法允许您根据记录的规则使用隐含的整数键从字段列表构造一个表。

标签: arrays class oop lua lua-table


【解决方案1】:

但据我了解,Lua 既有类又有表?

不,它没有。

Lua(忽略 C API 的东西)只有一种复杂的数据结构:表。

您可以使用表格创建一个类。您可以使用表格创建各种事物。 Lua 表非常灵活,正是因为它们是 Lua 拥有的唯一数据结构。

在 Lua 中,基础级别的每个复杂事物都是一张表。或者,如果它来自 C API,用户数据。

类基本上是创建对象的原型。您声明一个类中包含 X、Y 和 Z 成员,然后创建该类类型的对象,其中将包含 X、Y 和 Z 成员。

您可以创建模拟类行为的 Lua 表。但是 Lua 中没有任何形式上类似于类的语言结构。

【讨论】:

    【解决方案2】:

    Lua 没有类,只有表,有元表。 Lua使用原型实现OOP

    【讨论】:

      【解决方案3】:

      我认为您感到困惑,因为object.attribute 通常是其他语言访问对象属性的方式。

      无论如何,由于 Lua 没有类,点可用于访问表的字段,table.field 的工作方式与编写 table["field"] 完全相同。

      【讨论】:

        猜你喜欢
        • 2013-08-28
        • 2015-09-17
        • 1970-01-01
        • 2020-05-05
        • 1970-01-01
        • 1970-01-01
        • 2010-10-02
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多