joeforker
joeforker

Reputation: 41757

Why would a lua module set its table's __index as itself?

I noticed a lua module setting the returned table's __index as itself

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

function M.do()
end

return M

What does setting a table's __index as itself accomplish?

Later, you would use the module

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

Upvotes: 4

Views: 562

Answers (1)

lhf
lhf

Reputation: 72312

It is usually done to avoid creating a separate metatable to be used in objects created by the library:

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

I do this all the time in my libraries. It is somewhat lazy.

Upvotes: 3

Related Questions