Lua面向对象编程相关术语

直截了当地说,我用 Lua 已经有一段时间了,但是术语具体不是太熟悉,所以我花了几个小时上谷歌,也没找到明确的答案。

在 Lua 中涉及面向对象编程的术语有:

  • 对象
  • 函数
  • 方法

问题是,这些何时应该被正确使用,例如以下示例:

addon = { }
function addon:test_func( )
    return 'hi'
end

Q: 我理解 Lua 和面向对象编程,addon 是一个表,但是我读到过它也可以是一个对象——但它何时算是一个对象呢?在该表内创建一个函数后?

Q: test_func 是一个函数,但我读到过在它被放置于一个表(类)中后会变成一个“方法”

Q: 整行代码 addon:test_func( ),我知道冒号是一个操作符,但是这整行文本应该称为什么?一个类本身吗?

最后,针对这段示例代码:

function addon:test_func( id, name )

end

Q: idname 是什么,因为我看到有人将它们作为参数进行标识,但其他地方将其分类为参数,所以我一直坚持将其称为参数。

因此,每个术语的正确术语是什么,它们何时才成为它们看起来像的东西?

谢谢

点赞
用户3574628
用户3574628

我了解 Lua 和 OOP 后,认为 addon 是一个表,但我也读过它可以是一个对象,但它在什么时候确切地成为对象呢?是在那个表里创建函数之后吗?

“对象”这个术语并没有明确定义,但我见过它被定义为(在 C 中)任何值。在 Lua 中,我认为它和表是同义词。你也可以将其定义为类的实例。

test_func 是一个函数,但我读到它在表(类)中被称为“方法”。

你基本上是对的。方法指的是任何旨在使用冒号记法调用的函数。元方法也是方法,因为像普通方法一样,它们定义了表的行为。

整个代码行 addon:test_func( ),我知道冒号是一个运算符,但是这整行文本的术语是什么呢?是一个类吗?

这个特定的代码片段没有名称,它只是方法定义的一部分。

而且,我不会将冒号称为运算符。运算符应该是 x + y 中的加号,其中 xy 是自身具有意义的变量。在 addon:test_func() 中, test_func 只在表 addon 中有意义,而且只有在调用或定义方法时才可以使用冒号。事实上,冒号是语法糖的一种形式,其中真正的运算符是索引运算符 []。假设您正在调用该方法,扩展将是:addon['test_func'](addon)

idname 是什么,因为我看到一些人把它们标识为参数,但其他地方将它们分类为形参,所以我坚持叫它们形参。

它们是形参。形参是在函数签名中声明的名称。实参是传递给函数的值。

2019-03-05 00:44:49