【问题标题】:Lua Terminology related to OOP与 OOP 相关的 Lua 术语
【发布时间】:2019-03-05 08:59:05
【问题描述】:

言归正传;我已经使用 Lua 有一段时间了,但从来没有完全了解具体的术语,所以我已经在谷歌上搜索了几个小时,还没有得出一个明确的答案。

与Lua中的OOP相关,使用的术语包括:

  • 对象
  • 功能
  • 方法

问题是,何时正确使用这些?比如下面的例子:

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

问:根据我对 Lua 和 OOP 的理解,addon 是一个表,但是,我读到它也可以是一个对象——但是当它在技术上是一个对象时?在该表中创建函数之后?

问: test_func 是一个函数,但是,我读到它在放置在表(类)中时会变成一个“方法”。

问:整行addon:test_func( ),我知道冒号是运算符,但整行文本集的术语是什么?一个类本身?

最后,对于这个示例代码:

function addon:test_func( id, name )

end

问:什么是idname,因为我看到有些人将它们识别为参数,但其他领域将它们分类作为参数,所以我坚持使用参数。

简而言之,这些术语的正确术语是什么,它们什么时候变成现在的样子?

谢谢

【问题讨论】:

    标签: lua


    【解决方案1】:

    根据我对 Lua 和 OOP 的理解,addon 是一个表,但是,我读到它也可以是一个对象——但是当它在技术上是一个对象时呢?在该表中创建函数之后?

    Object 不是一个定义明确的术语。我已经看到它(在 C 中)定义为任何值。在 Lua 中,我认为它是表的同义词。您也可以将其定义为类的实例。

    test_func 是一个函数,但是,我读到它在放置在表(类)中时会变成一个“方法”。

    你基本上是对的。方法是打算用冒号表示法调用的任何函数。元方法也是方法,因为与常规方法一样,它们定义了表的行为。

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

    那段特定的代码没有名字。它只是方法定义的一部分。

    另外,我不会将冒号称为运算符。运算符将是 x + y 中的加号,其中 xy 都有自己的含义。在addon:test_func() 中,test_func 只在表addon 内有意义,并且只有在调用或定义方法时使用冒号才有效。冒号实际上是一种语法糖,其中真正的运算符是索引运算符:[]。假设您正在调用该方法,则扩展为:addon['test_func'](addon)

    什么是id和name,因为我看到有些人把它们识别为参数,但后来其他领域将它们分类为参数,所以我一直坚持使用参数。

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

    【讨论】:

    • 谢谢!因此,“对象”可以对任何事物进行分类,而不必局限于一种特定类型。如果您使用 addon.test_func() 与 addon:test_func(),术语会发生变化吗?我所知道的是,使用冒号时,self 作为第一个参数传递。
    • 由于 Lua 非常灵活,很难严格定义什么是方法。如果test_func 应该定义表的行为(即您打算用冒号调用它),那么它就是一种方法。如果addon只是函数的存储空间,那它就不是方法。
    猜你喜欢
    • 2012-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-16
    • 2011-02-15
    相关资源
    最近更新 更多