【问题标题】:Why would a lua module set its table's __index as itself?为什么 lua 模块会将其表的 __index 设置为自身?
【发布时间】:2019-02-11 21:24:46
【问题描述】:

我注意到一个 lua 模块将返回的表的 __index 设置为自身

local M = {
  _VERSION = "1.0.0"
}
M.__index = M

function M.do()
end

return M

将表的__index 设置为自身有什么作用?

稍后,您将使用该模块

local m = require("m")
m.do()

【问题讨论】:

  • 在您提供的代码中,它什么也不做。 M 从未用作元表,因此 __index 字段并不是特别相关。它只是表中的另一个键。你能提供一个更完整的例子吗?
  • 听起来“它什么都不做”很可能是正确答案。
  • 您更有可能错误地复制了您在模块中看到的内容。这就是为什么我想看一个完整的例子。
  • 我们确实需要uroborus 标签!

标签: lua lua-table


【解决方案1】:

通常这样做是为了避免在库创建的对象中创建单独的元表:

function M.new()
    return setmetatable({},M)
end

我一直在我的图书馆里这样做。有点懒。

【讨论】:

    猜你喜欢
    • 2017-02-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-28
    • 2020-04-02
    相关资源
    最近更新 更多