gpt4 book ai didi

lua - 在 Lua 中使用 'Object' 函数?

转载 作者:行者123 更新时间:2023-12-05 02:23:56 24 4
gpt4 key购买 nike

我希望能够在 Lua 中拥有具有引用自身的某些函数的“对象”(我不知道该怎么调用它)。我已经看到了我正在尝试做的事情的代码,但我从未理解过它的实际含义。我试过查看 Lua 网站,但没有成功。

基本代码:

table = {}

function newTable(...)
...
return setmetatable(table)
end

function table:funcName(...)
...
end

有人可以解释一下这里发生了什么以及我如何使用它吗?感谢阅读!

最佳答案

missingno 已经提到了一个解释其工作原理的资源。您也可以查看 lua wiki's OOP部分以获得更多解释和示例。

简要总结您的示例,从如何使用它开始。请注意,我更改了一些名称,因此它不会影响 lua 附带的标准模块。您可以通过调用 newObject 创建一个新对象。您可以使用 : 后跟方法名称来调用该对象的方法:

-- create two instances
object1 = newObject()
object2 = newObject()

-- call 'my_function' method for object1
object1:my_function()

您需要对元表有所了解,才能了解这种机制在幕后的工作原理。当您执行如下调用时:

object1:my_function()

这只是语法糖:

object1.my_function(object1)

这可以进一步分割为:

object1["my_function"](object1)

现在 object1 只是一个由 newObject 返回的空表——它没有 "my_function" 键。通常这会导致错误,因为您正在尝试调用 nil 值。但是,您可以使用元表更改此行为。基本思想是设置 __index 元方法指向一个包含类方法的表:

object_table = {}
object_table.__index = object_table
function newObject(...)
return setmetatable({}, object_table)
end

方法查找过程将如下所示:object1 -> table。如果 object1 没有键,则接下来查询 table。如果 table 具有该键,则返回关联值。如果 table 也没有,则返回 nil,因为 table 没有元表。

通过此设置,您只需将方法名称和函数分配为该对象的键值对,即可“覆盖”特定对象实例的方法。

object2.my_function = function (...)
-- do something different
end

关于lua - 在 Lua 中使用 'Object' 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18808728/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com