在 Lua 中通过 __index 元方法传递额外的参数

local T = {}
local m = {}
m.__index = function(self, i, par) -- 这里的 "par"
   self[i] = setmetatable({},{__index = function() return (par) end}) -- 返回 "par"
   return self[i]
end

setmetatable(T,m)

for par=1, 3 do
   for j=1, 3 do
      for k=1, j do
         T[j][k] = T[j][k](par) -- 将 "par" 传递给 __index 元方法
      end
   end
end

我正在尝试将 "par" 传递给由 for 循环改变的 __index 元方法。是否有办法可以实现这一点?

点赞
用户1442917
用户1442917

不可以,__index 元方法只接受 table, key 作为参数。参考 PiL 了解详情

2016-07-28 21:42:36
用户6101071
用户6101071

使用 __index 元方法可以实现,不需要传递参数。

local t = {}
local m = {}
m.__index = function(self, i)
    self[i] = setmetatable({}, {__index = function() return function(r,k) return r*k end end})
    return self[i]
end

setmetatable(t,m)

print(t[1][1](12, 12)) -- 传递 "12, 12" 返回 "12*12",即 144
2016-07-29 15:25:43