lua metatables - __index函数中的第一个参数

我正在尝试学习 Lua 中的元表,我遇到了以下示例:-

local my_metatable = {}

local my_tab = {}

setmetatable(my_tab, my_metatable)

-- 设置 __index 元方法:
my_metatable.__index = function (tab, key)
    print("Hello, " .. key)
    return "cruel world"
end

-- 触发 __index 访问器:
print("Goodbye, " .. my_tab["world"])

结果为:-

Hello, world
Goodbye, cruel world

我的问题是 - 在 my_metatable.__index = function (tab, key) 中,变量 tab 是用来做什么的。我可以将它更改为任何名称,但它对程序没有影响。

谢谢!

;^) Zalokin

点赞
用户8076767
用户8076767

tab 参数被传递了一个表本身的参数。

例如,给定你的代码 my_tab["world"],参数 tabkey 将分别被传递参数 my_tab"world"。因为你在 __index 函数中没有使用表,所以它并没有影响这个结果。

这里是一个基本的示例,说明它可能被用于什么情况。我们考虑一个特殊的 Array 表,它的行为类似于一个数组,但包含了一些额外的信息:

Array = {
    length = 0,
    array = {}
}

mt = {
    __index = function(tab, index)
        return tab.array[index]
    end
}

setmetatable(t, mt)

-- 当 Array[3] 被写入时,实际上返回的是 Array.array[3]

print(Array[3]) -- 实际上会打印 Array.array[3]

实际上这并不是实现这种功能的最佳方式,但希望这可以让你了解 tab 参数存在的原因以及 __index 可以用于什么目的。

2018-08-05 10:39:57