(lua) 这个搜索函数中参数 t 的作用是什么?

下面的代码是Lua程序设计的多继承演示。

local function search(k, plist)
    for i=1, #plist do
        local v = plist[i][k]
        if v then return v end
    end
end

function createClass(...)
    local c = {}
    local parents = {...}
    -- 参数 t 的作用是什么?
    setmetatable(c, {__index = function (t, k)
        return search(k, parents)
    end})
    c.__index = c
    function c:new(o)
        o = o or {}
        setmetatable(o, c)
        return o
    end
    return c
end
Account = {
    balance = 0,
    withdraw = function (self, v) self.balance = self.balance - v end,
    deposit =function (self, v) self.balance = self.balance + v end,
    getbalance = function (self) return self.balance end,
    new = function (self, v)
        v = v or {}
        setmetatable(v, self)
        self.__index = self
        return v
    end,
}
Named = {
    name = "",
    getname = function (self) return self.name end,
    setname = function (self, n) self.name = n end,
}
NamedAccount = createClass(Account, Named)
account = NamedAccount:new{name = 'Paul'}
print(account:getname())
account:setname("Phoenix")
print(account:getname())
account:deposit(1000)
print(account:getbalance())
account:withdraw(221)
print(account:getbalance())

正如上面代码所示,参数 t 在语句setmetatable(c, {__index = function (t, k) return search(k, parents) end})中的作用是什么?参数 t 看起来没有被使用。我尝试删除它,但是出现了错误提示:

lua: Multi-inheritance.lua:46: attempt to call a nil value (method 'getname')

stack traceback:

Multi-inheritance.lua:46: in main chunk

[C]: in ?

看起来好像我不能简单地删除它。有人可以告诉我 t 在这里起到的作用吗?

点赞